开发者问题收集

如何比较两个数组来更新其中一个数组中的键值对?

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;
    }
});

FIDDLE

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;
        }
    }
}

JS Fiddle

ztyankov
2015-04-29