我有以下情况:
我有一个像这样的变量数组:
[
{
id: "foo",
value: "bar"
},
{
id: "baz",
value: "buz"
}
]
我有一个像这样的默认数组:
[
{
id: "foo",
value: "default"
},
{
id: "bar",
value: "default"
},
{
id: "baz",
value: "default"
}
]
我想比较这两个数组,并将缺少的默认值添加到第一个数组中。
这就是我想要的输出:
[
{
id: "foo",
value: "bar" // keep unchanged because it was already there
},
{
id: "bar",
value: "default" // use the default because it was not in there
},
{
id: "baz",
value: "buz" // also keep because it was already in the first array
}
]
实现这一目标的最好方法是什么?谢谢你的帮助!
答案 0 :(得分:2)
如何解决这个问题的方法之一就是从条目中过滤第二个数组,使其与第一个数组中的var arr1=[{id:"foo",value:"bar"},{id:"baz",value:"buz"}],
arr2=[{id:"foo",value:"default"},{id:"bar",value:"default"},{id:"baz",value:"default"}];
var arr3 = arr2.filter(v => arr1.every(c => c.id != v.id));
console.log([...arr1, ...arr3]);
相同,并将其连接到一个对象数组中。
{{1}}
答案 1 :(得分:0)
嗯,直接使用dojo - lang.mixin是不可能的。因为mixin基本上处理json对象而不是对象数组(在你的情况下)。
解决方案 - 我刚刚编写了一个JavaScript函数,它会返回合并后的数组。
var baseArray = [{
id: "foo",
value: "bar"
},
{
id: "baz",
value: "buz"
},
{
key: "key",
value: "value"
}
];
var defaultArray = [{
id: "foo",
value: "default"
},
{
id: "bar",
value: "default"
},
{
id: "baz",
value: "default"
}
];
var result = _mixinArrays(baseArray , defaultArray );
console.log(result);
function _mixinArrays(a, b){
for (var i = 0; i < b.length; i++) {
var matched = false;
for (var j = 0; j < a.length; j++) {
if (b[i].id == a[j].id) {
matched = true;
}
}
if (!matched) {
a.push(b[i]);
}
}
return a;
}
希望这会对你有所帮助:)。