20

我有一个这样的数据数组:

var nameInfo  = [{name: "Moroni", age: 50},
                 {name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},
                 {name: "Nephi", age: 29},
                 {name: "Enos", age: 34}];

如果我有这样的对象:

var nameInfo  = {name: "Moroni", age: 51};

有没有一种简单的方法可以更新变量 nameInfo. 这些之间的关键是名称列。我知道有一种方法可以通过搜索行、删除和添加来做到这一点,但我想有一种方法来更新行。请注意,如果它有帮助,我确实加载了 underscore.js。

4

8 回答 8

28

最简单的方法是遍历并找到具有匹配名称的名称,然后更新年龄:

var newNameInfo  = {name: "Moroni", age: 51};
var name = newNameInfo.name;

for (var i = 0, l = nameInfo.length; i < l; i++) {
    if (nameInfo[i].name === name) {
        nameInfo[i].age = newNameInfo.age;
        break;
    }
}

JSFiddle 示例

使用下划线,您可以使用_.find方法代替 for 循环执行以下操作:

var match = _.find(nameInfo, function(item) { return item.name === name })
if (match) {
    match.age = newNameInfo.age;
}

JSFiddle 示例

于 2013-04-22T13:23:54.563 回答
11

编辑: 您可以将 ES6过滤器与箭头功能结合使用

nameInfo.filter(x => {return x.name === nametofind })[0].age = newage

你可以使用 _.where函数

var match = _.where(nameInfo , {name  :nametofind });

然后更新比赛

match[0].age = newage
于 2014-09-03T12:50:59.420 回答
6
var nameInfo  = [{name: "Moroni", age: 50},{name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},{name: "Nephi", age: 29},
                 {name: "Enos", age: 34}
                ];
_.map(nameInfo, function(obj){
  if(obj.name=='Moroni') {
    obj.age=51; // Or replace the whole obj
  }
});

这应该这样做。它整洁可靠,带有下划线

于 2014-12-03T09:17:45.273 回答
4

使用下划线,您可以使用 _.findWhere http://underscorejs.org/#findWhere

_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
=> {year: 1918, newsroom: "The New York Times",
  reason: "For its public service in publishing in full so many official reports,
  documents and speeches by European statesmen relating to the progress and
  conduct of the war."}
于 2013-09-25T05:16:41.510 回答
4

您可以使用 findWhere 和扩展

obj = _.findWhere(@songs, {id: id})
_.extend(obj, {name:'foo', age:12});
于 2015-07-07T18:18:44.423 回答
1

您可以使用 _.find 方法,如下所示:

var nameInfos  = [{name: "Moroni", age: 50},
                 {name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},
                 {name: "Nephi", age: 29},
                 {name: "Enos", age: 34}];
var nameToSearch = "Moroni";
var myRecord = _.find(nameInfos, function(record){ return record.name === nameToSearch; });

工作示例:http: //jsfiddle.net/9C2u3/

于 2013-04-22T13:23:17.207 回答
1
var match = _.findWhere(nameInfo , {name  :nametofind });
match.age = newage
于 2014-11-10T16:33:49.597 回答
1

使用 lodash 的find()函数的前锋,

var nameInfo  = [{name: "Moroni", age: 50},
             {name: "Tiancum", age: 43},
             {name: "Jacob", age: 27},
             {name: "Nephi", age: 29},
             {name: "Enos", age: 34}];

var objToUpdate = _.find(nameInfo, {name: "Moroni"});

if(objToUpdate) objToUpdate.age = 51;

console.log(nameInfo); // Moroni age will be 51;

注意:如果有多个 Moroni 对象,_.find 只能获取第一个匹配项。

于 2016-06-08T16:24:39.553 回答