gpt4 book ai didi

javascript - 循环遍历两个数组并在每个数组中找到匹配项的 ES6 特定方法?

转载 作者:搜寻专家 更新时间:2023-11-01 05:21:35 25 4
gpt4 key购买 nike

假设我有两个要比较的对象数组:

var arr1 = [
{
name: 'A', type: "Dog"
},
{
name: 'B', type: "Zebra"
},
{
name: 'C', type: "Cat"
},
{
name: 'D', type: "Dingo"
}
]

var arr2 = [
{
name: 'A', type: "Wolf"
},
{
name: 'B', type: "Echidna"
},
{
name: 'C', type: "Wallaby"
},
{
name: 'D', type: "Rabbit"
}
]

假设 arr1 是旧数据,arr2 是来自 API 的更新数据。

我想遍历数组,找到 name 匹配的对象。如果匹配,我想将 typearr1 更新为 arr2

我会这样做:

for(var i = 0; i<arr1.length; i++){
for(var x = 0; x<arr2.length; x++){
if(arr1[i].name === arr2[x].name){
arr1[i].type = arr2[x].type;
}
}
}

我想知道 ECMAScript 6 中是否有任何更新的方法可以使这更容易做到(在现实世界的场景中,逻辑要复杂得多,并且在循环中循环感觉相当笨拙);

最佳答案

在 ES2015 中你不会使用这个数据结构,你会使用 maps :

var map1 = new Map([
['A', "Dog"],
['B', "Zebra"],
['C', "Cat"],
['D', "Dingo"]
]);
var map2 = new Map([
['A', "Wolf"],
['B', "Echidna"],
['C', "Wallaby"],
['D', "Rabbit"]
]);

然后,要使用 map2 中的数据更新 map1,您可以使用

for(let [key, value] of map2)
map1.set(key, value);

平均而言, map 操作需要是次线性的。如果 map 是用散列实现的,它们应该是常量。那么总成本将是线性的。

或者,由于键是字符串,您可以考虑使用普通对象。您可以使用 Object.create(null) 创建它以防止它从 Object.prototype 继承属性,并使用 Object.assign 分配属性

var obj1 = Object.assign(Object.create(null), {
A: "Dog",
B: "Zebra",
C: "Cat",
D: "Dingo"
});
var obj2 = Object.assign(Object.create(null), {
A: "Wolf",
B: "Echidna",
C: "Wallaby",
D: "Rabbit"
});

然后,要用 obj2 中的数据更新 obj1,您可以使用

for(let key in obj2)
obj1[key] = obj2[key];

很可能该对象将使用散列来实现,因此每次分配平均都是不变的。总成本将是线性的。

关于javascript - 循环遍历两个数组并在每个数组中找到匹配项的 ES6 特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com