Javascript 比较每个性能问题的阵列
我有两个数组,其中一个数组的对象数组如下,一个数组的记录超过10k,另一个数组的记录少于100条Javascript 比较每个性能问题的阵列,javascript,arrays,foreach,Javascript,Arrays,Foreach,我有两个数组,其中一个数组的对象数组如下,一个数组的记录超过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:"sus
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]
我想在bigArray的索引中找到smallArray中的对象所在的位置,并将其添加到另一个数组中,比如我在下面尝试的indexArray
let indexArray = [];
bigArray.forEach((element, i) => {
smallArray.forEach(ele => {
if (element.name == ele.name && element.id == ele.id) {
indexArray.push(i); return;
}
});
});
但这需要时间。最快的方法是什么?您可以将O(N^2)
方法简化为O(N)
方法,方法是将bigArray
简化为由名称和id
组成的键索引的对象。将名称
和id
连接到一个不包含在其中的字符,例如\uu
:
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);
}
});
您可以使用映射
并映射找到的索引
const getKey=({id,name})=>[id,name].join(“|”);
让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}],
smallArray=[{id:2,名称:“sushama”},{id:3,名称:“Sushant”}],
map=newmap(bigArray.map((o,i)=>[getKey(o,i]))
indexArray=smallArray.map((o)=>map.get(getKey(o));
控制台日志(indexArray)
返回
不会“中断”forEach
循环。无法停止forEach的forEach
。每个项目都将调用forEach
回调函数一次。找到元素后,继续运行forEach
循环会浪费资源
您应该将用于
:
let indexArray = [];
bigArray.forEach((element, i) => {
for (var ii = 0; ii < smallArray.length; ii++) {
var ele = smallArray[ii];
if (element.name == ele.name && element.id == ele.id) {
indexArray.push(i);
break; // This will break the "for" loop as we found the item
}
}
});
let indexArray=[];
bigArray.forEach((元素,i)=>{
对于(var ii=0;ii
提示:代码中总是有一个好的缩进。实际上,您的代码在第一眼看到代码块时,缩进非常糟糕。我在这个示例中修复了它。请给出一个示例输出,不清楚您想要实现什么。在
bigArray
中是否有多个具有相同id
和name
的条目??不,它不会有酷酷的伙伴,我将尝试它跳转目标不能跨函数错误。这就是为什么我试着回去