同时在JavaScript中循环两个数组

CKA*_*CKA 0 javascript arrays foreach

let masterList=[{id:1,name:'Abc'},{id:2,name:'Def'},{id:3,name:'Ghi'}];
let selectedList=[2,3];
Run Code Online (Sandbox Code Playgroud)

理想的结果是

//desiredList=[{id:2,name:'Def'},{id:3,name:'Ghi'}]
Run Code Online (Sandbox Code Playgroud)

目前我正在做的是

     let parsedArray = [];
      masterList.forEach(mItem => {
            selectedList.forEach(sItem => {
                if (mItem.id === sItem) {
                    parsedArray.push(mItem);
                }
            });
        });
     desiredList=parsedArray
Run Code Online (Sandbox Code Playgroud)

在大型数组上进行迭代时,我发现此方法效率不高,是否可以使用该方法实现相同的逻辑,内置的javascript操作符?

Nin*_*olz 5

您可以将mapwith id作为键,将对象作为值,然后通过map映射映射中的所需值selectedList

此方法使用的顺序selectedList

var masterList = [{ id: 1, name: 'Abc' }, { id: 2, name: 'Def' }, { id: 3, name: 'Ghi' }],
    selectedList = [2, 3],
    result = selectedList.map(Map.prototype.get, new Map(masterList.map(o => [o.id, o])));

console.log(result);
Run Code Online (Sandbox Code Playgroud)