Javascript 基于密钥的数组搜索与更新

Javascript 基于密钥的数组搜索与更新,javascript,lodash,Javascript,Lodash,我有两个数组,需要通过搜索第一个数组中的位置来更新第二个数组 let arr1 = [{"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"}] let arr2 = [{"EMAIL":"test1@stc.com","POSITION":"GM"}, {"EMAIL":"test2@stc.com","POSITION":"GMH"},

我有两个数组,需要通过搜索第一个数组中的位置来更新第二个数组

let arr1 = [{"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"}]

let arr2 = [{"EMAIL":"test1@stc.com","POSITION":"GM"},
            {"EMAIL":"test2@stc.com","POSITION":"GMH"},
            {"EMAIL":"test3@stc.com","POSITION":"RGM"},
            {"EMAIL":"test3@CSR.COM.AU","POSITION":"GM"}]
输出阵列

 output  = [ {"LEVEL":5,"EMAIL":"test1@stc.com","POSITION":"GM"}, 
                {"LEVEL":5,"EMAIL":"test2@stc.com",""POSITION":"GMH"}, 
                {"LEVEL":4,"EMAIL":"test3@stc.com","POSITION":"RGM"}, 
                {"LEVEL":5,"EMAIL":"test3@CSR.COM.AU","POSITION":"GM"}]
我尝试使用以下代码进行筛选,但给出了空数组,因此无法继续:

const output =arr1.filter((item) => {
  return arr2.indexOf(item.POSITION) !== -1 && (item.POSITION)
});
您可以使用
级别
创建一个新对象并映射新对象

var array1=[{LEVEL:4,POSITION:RGM},{LEVEL:5,POSITION:GM},{LEVEL:5,POSITION:GMH}],
array2=[{电子邮件:test1@stc.com,位置:“GM”},{电子邮件:test2@stc.com,职位:{GMH},{电子邮件:test3@stc.com,位置:“RGM”},{电子邮件:test3@CSR.COM.AU“,位置:“GM”}],
levels=array1.reduce((m,{LEVEL,POSITION})=>m.set(POSITION,LEVEL),新地图),
result=array2.map(o=>Object.assign({LEVEL:levels.get(o.POSITION)},o));
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
我想您可以使用
map
创建一个新数组。在那里,您可以使用
find
为当前
位置
获取适当的
级别
属性

一个智能解决方案可以是以下内容:

const positions=[{“LEVEL”:4,“POSITION”:“RGM”},{“LEVEL”:5,“POSITION”:“GM”},{“LEVEL”:5,“POSITION”:“GMH”}];
常量电子邮件=[{“电子邮件”:test1@stc.com,“职位”:“GM”},{“电子邮件”:test2@stc.com,“职位”:“GMH”},{“电子邮件”:test3@stc.com,“位置”:“RGM”},{“电子邮件”:test3@CSR.COM.AU“,”位置“:”GM“}];
const result=emails.map(email=>{
电子邮件['LEVEL']=positions.find(p=>p['POSITION']==email['POSITION'])['LEVEL'];
回复邮件;
})
控制台日志(结果)最简单的方法是:

让arr1=[{“级别”:4,“位置”:“RGM”},{“级别”:5,“位置”:“GM”},{“级别”:5,“位置”:“GMH”}]
让arr2=[{“电子邮件”:test1@stc.com“,”位置“:“GM”},
{“电子邮件”:test2@stc.com“,”位置“:“GMH”},
{“电子邮件”:test3@stc.com“,”位置“:“RGM”},
{“电子邮件”:test3@CSR.COM.AU“,”位置“:“GM”}]
让输出=arr1.map(项=>{
item.Email=arr2.find(a=>{
返回a.POSITION==item.POSITION
}).电子邮件;
退货项目;
});

控制台日志(输出)另一个初学者解决方案:

let arr1 = [{"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"}]

let arr2 = [{"EMAIL":"test1@stc.com","POSITION":"GM"},
            {"EMAIL":"test2@stc.com","POSITION":"GMH"},
            {"EMAIL":"test3@stc.com","POSITION":"RGM"},
            {"EMAIL":"test3@CSR.COM.AU","POSITION":"GM"}]

function addLevel() {
    const resultingArray = [];
    arr2.forEach(itemarray2 => {
        const copyOfArrayItem2 = Object.assign({}, itemarray2);        
        resultingArray.push(copyOfArrayItem2);
        const itemArray1 = arr1.find(x => x.POSITION === itemarray2.POSITION);
        if(itemArray1) {
            copyOfArrayItem2.LEVEL = itemArray1.LEVEL;
        }
    });
    return resultingArray;
}


const newArray = addLevel();
console.log(newArray);