我有一个对象数组: -
var arr1 = [{
"name": "A"
}, {
"name": "B"
}, {
"name": "C"
}, {
"name": "D"
}];
我想为第二个数组中不存在的每个元素添加一个新属性。
var arr2 = [C,D]
结果数组应为: -
arr1 = [{
"name": "A",
"country":"USA"
}, {
"name": "B",
"country":"USA"
}, {
"name": "C"
}, {
"name": "D"
}];
任何人都可以告诉我如何实现这个目标吗?
答案 0 :(得分:6)
我想为第二个数组中不存在的每个元素添加一个新属性。
完全会更改您最初提出的问题。
如果项目是可变的,您只需循环遍历数组,将属性添加到所选项目。有many ways to do that,例如forEach
:
arr1.forEach(function(item) {
if (arr2.indexOf(item.name) === -1) {
item.country = "USA";
}
});
直播示例:
var arr1 = [{
"name": "A"
}, {
"name": "B"
}, {
"name": "C"
}, {
"name": "D"
}];
var arr2 = ["C", "D"];
arr1.forEach(function(item) {
if (arr2.indexOf(item.name) === -1) {
item.country = "USA";
}
});
console.log(arr1);
如果它们是不可变的,则使用map
代替:
arr1 = arr1.map(function(item) {
if (arr2.indexOf(item.name) === -1) {
return /*...create item with `country = "USA"` here...*/;
} else {
return item;
}
});
直播示例:
var arr1 = [{
"name": "A"
}, {
"name": "B"
}, {
"name": "C"
}, {
"name": "D"
}];
var arr2 = ["C", "D"];
arr1 = arr1.map(function(item) {
if (arr2.indexOf(item.name) === -1) {
return {name: item.name, country: "USA"};
} else {
return item;
}
});
console.log(arr1);
原始回答:(至your original question)
您可以在添加属性的结果数组上循环。有many ways to do that,例如forEach
:
arr1.forEach(function(item) {
item.country = "USA";
});
从技术上讲,可以使其成为filter
的副作用,如下所示:
var arr1 = arr1.filter(function(item){
if (arr2.indexOf(item.name) === -1) {
item.country = "USA";
return true;
};
return false;
});
但,filter
回调(及类似)中的副作用通常不是一个好主意。除非你知道结果数组(arr1
)是成千上万的条目,否则第二遍通过过滤然后修改来保持简单。
答案 1 :(得分:0)
使用Array.forEach并添加属性(如果元素不存在) - 使用您已使用的相同比较。