gpt4 book ai didi

Javascript,如何匹配并获取包含在两个数组中的相似对象?

转载 作者:行者123 更新时间:2023-11-30 16:59:40 26 4
gpt4 key购买 nike

我有两个对象数组。我想按名称检查数组一中存在于数组二中的对象列表。

arr1 = [{name: "krishna", age: 27}, {name: "chandan", age 30}]
arr2 = [{name: "krishna", age: 27}, {name: "chandan", age 30}, {name: "someone", age: 30}]

arr1 intersec arr2 = [{name: "krishna", age: 27}, {name: "chandan", age 30}]

首先,我尝试遍历数组并按名称查找相似的对象,如下所示

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

后来我觉得如果数据变大,这段代码会变得复杂。

所以我想出了另一个逻辑,我将 arr1 字符串化并迭代 arr2 并获取名称并在字符串化后的 arr1 上使用 indexOf 函数来检查它是否存在。

var exp = "name: \""+arr2[i].name+"\"";
stringArr1.indexOf(exp);

我想知道哪一个是有效的,还有其他有效的方法吗?

最佳答案

在谈论效率时您是正确的,上面的复杂度是 O(n^2) 级别,因为您有两个“嵌套”循环。您只想在每个循环中运行一次。

首先,我将遍历第二个数组并创建一个对象,以便您可以轻松地按名称搜索:

var obj2 = {};
for (var i = 0; i < arr2.length; i++) {
obj2[arr2[i].name] = arr2[i];
}

然后,遍历第一个数组,查看name属性是否存在于我们创建的新obj2对象中:

var intersec = [];
for (var i = 0; i < arr1.length; i++) {
if (obj2[arr1[i].name]) {
intersec.push(arr1[i]);
}
}

此解决方案将为您提供 O(2n) 级别的复杂性......效率更高!

关于Javascript,如何匹配并获取包含在两个数组中的相似对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29101763/

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