Javascript 如何比较两个数组来更新一个数组中的键值对?
我有一个主要的标签数组Javascript 如何比较两个数组来更新一个数组中的键值对?,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个主要的标签数组 var tagsArray = [ { name: "1", selected: undefined }, { name: "2", selected: undefined }, { name: "3", selected: undefined } ] 然后选择一组选定的标记进行比较: var selectedTags = [
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
中将同一对象的选定值设置为true
?创建一个访问映射,然后迭代并找到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;
}
});
您仍然可以使用2来表示循环,而且在代码或清晰度方面也不会太差。但平均而言,它的运行速度比使用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;
}
}
}
vari,j;
对于(i=0;i
谢谢!忘记了map
,这太干净了,我试图用几个for-loop来实现它。谢谢你的提示!我猜映射
的工作方式与开关盒
语句的工作方式相同,因为它可以更快地找到需要查找的内容?不客气!地图是为快速查找数据而设计的。因此,例如,它使用一种不同的方法,而不是执行整个内部循环来匹配从tagsArray到selectedTags数组的名称,它使用更少的时间来找到相同的匹配。