2016-09-08 3 views
-3

Это то, что у меня есть. Я пытаюсь обновить значение firstName в выбранном элементе массива. Когда я выполняю код, он просто добавляет то, что я пытаюсь идентифицировать как свойство и желаемое значение для выбранного элемента массива.Как изменить свойство элементов массива

var _ = require('underscore'); 
var data = [ 
{id:1, firstName: 'John', lastName: 'Smith'}, 
{id:2, firstName: 'John', lastName: 'Doe'}, 
{id:3, firstName: 'Johnny', lastName: 'Smith'} 
]; 

module.exports.lookupById = function(id, newName) { 
console.log('Lookup By ID: ' + (id)); 
Id = _.where(data, {id: id }); 
console.log(Id);  
newId = Id; 
newId['firstName'] = newName; 
console.log(newId); 

Этот код находится в файле, который выполняет код выше

var foo = require('./hwa1'); 
foo.lookupById(2, 'Mary'); 
+1

Является ли это Lodash или Underscore? Какая версия? – Phil

+0

Извините, что не поставил это. Это подчеркивание. –

+0

['_.where'] (http://underscorejs.org/#where) не возвращает то, что вы думаете о нем, попробуйте [' _.find'] (http://underscorejs.org/#find) , Кроме того, вы не объявили 'Id' или' newId', а 'newId' полностью избыточным – Phil

ответ

0

Вы могли бы добиться того, что с обычной петлей, проверьте следующий код:

var data = [ 
    {id:1, firstName: 'John', lastName: 'Smith'}, 
    {id:2, firstName: 'John', lastName: 'Doe'}, 
    {id:3, firstName: 'Johnny', lastName: 'Smith'} 
]; 

function lookupById(id, newName) { 
    _.each(data, function(item) { 
     if(item.id === id) { 
      item.firstName = newName 
     } 
    }); 
} 

Это будет меняться каждый элемент с идентификатором соответствует критериям.

Или с помощью findWhere, который дает более чистый код:

function lookupById(id, newName) { 
    var itemToChange = _.findWhere(data, { id: id }); 
    itemToChange.firstName = newName; 
} 

Это будет изменить только первый пункт, где идентификатор соответствует вашим критериям.