最佳答案
我想知道是否有一种更简单的方法在 loash 中替换 JavaScript 集合中的一个项目?(可能是 复制品,但我不明白那里的答案:)
我看了他们的文件,但什么也没找到
我的代码是:
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
// Can following code be reduced to something like _.XX(arr, {id:1}, {id:1, name: "New Name"});
_.each(arr, function(a, idx){
if(a.id === 1){
arr[idx] = {id:1, name: "Person New Name"};
return false;
}
});
_.each(arr, function(a){
document.write(a.name);
});
更新: 我要替换的对象有很多属性,比如
{ id: 1,Prop1: ... ,Prop2: ... ,等等}
解决方案:
感谢 Dfsq,但我发现了一个适当的解决方案,在 loash,似乎工作很好,是相当整洁,我把它在一个混合以及,因为我有这个要求在许多地方。JSBin
var update = function(arr, key, newval) {
var match = _.find(arr, key);
if(match)
_.merge(match, newval);
else
arr.push(newval);
};
_.mixin({ '$update': update });
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
_.$update(arr, {id:1}, {id:1, name: "New Val"});
document.write(JSON.stringify(arr));
更快的解决方案 正如@dfsq 指出的那样,跟踪要快得多
var upsert = function (arr, key, newval) {
var match = _.find(arr, key);
if(match){
var index = _.indexOf(arr, _.find(arr, key));
arr.splice(index, 1, newval);
} else {
arr.push(newval);
}
};