Sea*_*n O 5 javascript arrays object underscore.js
我想用另一个数组中的对象更新(替换)我的数组中的对象。每个对象具有相同的结构。例如
var origArr = [
{name: 'Trump', isRunning: true},
{name: 'Cruz', isRunning: true},
{name: 'Kasich', isRunning: true}
];
var updatingArr = [
{name: 'Cruz', isRunning: false},
{name: 'Kasich', isRunning: false}
];
// desired result:
NEWArr = [
{name: 'Trump', isRunning: true},
{name: 'Cruz', isRunning: false},
{name: 'Kasich', isRunning: false}
];
Run Code Online (Sandbox Code Playgroud)
我已经尝试过concat()和Underscore的_.uniq函数,但是它总是转储较新的对象并从本质上返回原始数组。
有没有一种方法可以覆盖(替换)属性中匹配origArr的对象?updatingArrname
我来这里正是为了寻找这一点,看到了@Gruff Bunny的技术,并且想知道“ lodash”是否不是“下划线”的最佳选择?
瞧瞧:
let result = _.unionBy(updatingArr, origArr, 'name');
Run Code Online (Sandbox Code Playgroud)
你可以Array#map结合使用Array#reduce
var origArr = [{ name: 'Trump', isRunning: true }, { name: 'Cruz', isRunning: true }, { name: 'Kasich', isRunning: true }],
updatingArr = [{ name: 'Cruz', isRunning: false }, { name: 'Kasich', isRunning: false }],
NEWArr = origArr.map(function (a) {
return this[a.name] || a;
}, updatingArr.reduce(function (r, a) {
r[a.name] = a;
return r;
}, Object.create(null)));
document.write('<pre>' + JSON.stringify(NEWArr, 0, 4) + '</pre>');Run Code Online (Sandbox Code Playgroud)
使用double for循环和拼接可以像这样:
for(var i = 0, l = origArr.length; i < l; i++) {
for(var j = 0, ll = updatingArr.length; j < ll; j++) {
if(origArr[i].name === updatingArr[j].name) {
origArr.splice(i, 1, updatingArr[j]);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的例子
| 归档时间: |
|
| 查看次数: |
10604 次 |
| 最近记录: |