我想知道在lodash中是否有更简单的方法来替换JavaScript集合中的项?(可能是duplicate,但我不明白那里的答案:)
我看了他们的文档,但什么也没找到
我的代码是:
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,但我在lodash中找到了一个合适的解决方案,它似乎工作得很好,而且相当整洁,我也把它放在了一个mixin中,因为我在很多地方都有这个需求。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);
}
};
发布于 2014-12-25 04:24:10
在本例中,您需要做的就是在数组中查找对象并使用Array.prototype.splice()
方法,请阅读更多详细信息here
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
// Find item index using _.findIndex (thanks @AJ Richardson for comment)
var index = _.findIndex(arr, {id: 1});
// Replace item at index using native splice
arr.splice(index, 1, {id: 100, name: 'New object.'});
// "console.log" result
document.write(JSON.stringify( arr ));
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
发布于 2017-01-23 13:30:30
似乎最简单的解决方案是使用ES6的.map
或lodash的_.map
var arr = [{id: 1, name: "Person 1"}, {id: 2, name: "Person 2"}];
// lodash
var newArr = _.map(arr, function(a) {
return a.id === 1 ? {id: 1, name: "Person New Name"} : a;
});
// ES6
var newArr = arr.map(function(a) {
return a.id === 1 ? {id: 1, name: "Person New Name"} : a;
});
这有一个很好的效果,避免了改变原始数组。
发布于 2018-05-29 16:12:01
ES6这段代码很适合我。
let result = array.map(item => item.id === updatedItem.id ? updatedItem : item)
https://stackoverflow.com/questions/27641731
复制相似问题