遍历2个数组并将一个数组中的值分配给第二个数组的每个匹配对象

时间:2018-11-27 06:53:52

标签: javascript arrays angular lodash

我有2个数组1.Options和2.sameAccountArray

 options.map((opt, optInd) => {
            sameAccountArray.map((acObj, acInd) => {
                if (opt.optNumber === acObj.optNumber) {
                    console.log(opt.optNumber, acObj.optNumber, acObj.exist, acObj.exist, 'WTF', sameAccountArray);
                    opt.exist = acObj.exist;
                } else {
                    console.log(opt, acObj, opt.optNumber, acObj.optNumber, 'kundi');
                    // opt.exist = false;
                }
                // else {
                //     if (optInd === acInd) {
                //         opt.exist = acObj.exist;
                //     } else {
                //         console.log('elseeee', optInd, acInd,opt.optNumber, acObj.optNumber, opt.exist, acObj.exist);
                //     }
                // }
            });
        });

sameAccountArray的数据结构:

{
                    'key': key,
                    'shares': this.no_of_shares[key],
                    'refValue': this.your_reference[key],
                    'exist': false,
                    'accountNumber': extractedAccountNumber, 'optNumber': parseInt(extractedOptionNumber)
                }

选项内部有很大的字段,但是我们不需要关心它。选项和sameAccountArray具有名为optNumber的公共字段。我尝试遍历每个数组,如果optNumber相同,则在options数组的每个对象中分配一个名为exist的值。 sameAccountArray已经具有正确的exist值,我只需要分配该值以匹配options数组的对象。不知何故分配不正确。请注意,选项数组和sameAccount数组的长度不同。 sameAccountArray具有动态对象,而options具有固定数量的元素。知道这是怎么回事吗?预先感谢

3 个答案:

答案 0 :(得分:1)

尝试一下:

options.forEach(opt=>{
    sameAccountArray.forEach(acObj=>{
      if (opt.optNumber === acObj.optNumber) opt.exist = acObj.exist;
    })
})

答案 1 :(得分:0)

  

map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

您不能使用map()函数来修改数组,而只能使用所需结果创建一个新数组。

答案 2 :(得分:0)

    let sameAccountObject={};

    sameAccountArray.forEach((account)=>{
        sameAccountObject[account.optNumber]=account;
    });

    let result=options.map((option)=>{
        let account=sameAccountObject[option.optNumber];
        if(account){
            option.exist=account.exist;
        }
       return option;
    });
 console.log(result);