如何比较两个数组来更新其中一个数组中的键值对?
2015-04-29
266
我有一个主标签数组
var tagsArray = [
{
name: "1",
selected: undefined
},
{
name: "2",
selected: undefined
},
{
name: "3",
selected: undefined
}
]
然后有一个选定标签数组要与之比较:
var selectedTags = [
{
name: "1",
selected: true
}
]
如何运行某种比较(for 循环)来检查
selectedTags
中的哪些对象具有
selected: true
值?
然后还将
tagsArray
中同一对象的
selected
值设置为
true
?
2个回答
创建一个访问图,然后迭代并找到
true
值并在另一个数组中设置值
var map = {};
tagsArray.forEach(function(obj, index) {
map[obj.name] = index;
});
selectedTags.forEach(function(obj) {
if ( obj.selected ) {
tagsArray[map[obj.name]].selected = true;
}
});
adeneo
2015-04-29
您仍然可以使用 2 个 for 循环,而且代码或清晰度方面看起来不会差很多。但平均而言,它的运行速度比使用 map 慢 O(n^2)。
var i,j;
for(i = 0; i < tagsArray.length; i++){
for(j = 0; j < selectedTags.length; j++){
if(tagsArray[i].name === selectedTags[j].name){
tagsArray[i].selected = true;
break;
}
}
}
ztyankov
2015-04-29