gpt4 book ai didi

javascript - 对每个性能问题进行数组比较

转载 作者:行者123 更新时间:2023-11-28 11:29:46 25 4
gpt4 key购买 nike

我有两个包含对象数组的数组,如下所示,一个数组将包含超过 10k 条记录,其他数组将包含低于 100 条记录

let bigArray = [{id:1, name:"Raj", level:0}, {id:2, name:"sushama", level:2}, {id:3, name:"Sushant", level:0}, {id:4, name:"Bhaskar", level:2},....upto 30k records] 

let smallArray = [{id:2, name:"sushama"}, {id:3, name:"Sushant"}....upto 100 records]

我想找到来自smallArray的对象所在的bigArray索引中的位置,并将其添加到另一个数组,比如我在下面尝试过的indexArray

let indexArray = []; 
bigArray.forEach((element, i) => {
smallArray.forEach(ele => {
if (element.name == ele.name && element.id == ele.id) {
indexArray.push(i); return;
}
});
});

但这需要时间。最快的方法是什么?

最佳答案

您可以通过将 bigArray 简化为索引对象,将 O(N^2) 方法转变为 O(N) 方法由 nameid 组成的键。使用两者中都不包含的字符连接 nameid,例如 _:

const indexArray = [];
const bigArrayIndiciesByNameAndId = bigArray.reduce((a, { name, id }, i) => {
a[name + '_' + id] = i;
return a;
}, {});

smallArray.forEach(ele => {
const keyToFind = ele.name + '_' + ele.id;
const foundIndex = bigArrayIndiciesByNameAndId[keyToFind];
if (foundIndex) {
indexArray.push(foundIndex);
}
});

关于javascript - 对每个性能问题进行数组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966967/

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