Переберите 2 массива и присвойте значение из одного массива каждому подходящему объекту второго массива. - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть 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)
                }

Опция имеет большие поля внутри, но нам не нужнозаботиться об этом.options и sameAccountArray имеют общее поле с именем optNumber.Я пытаюсь перебрать каждый массив и назначить значение с именем exist в каждом объекте массива параметров, если optNumber то же самое.У sameAccountArray уже есть правильное значение exist, мне просто нужно присвоить это значение для соответствия объектам массива options.Как-то это не правильно назначено.Обратите внимание, что массив параметров и sameAccount Array имеют разную длину.В sameAccountArray есть динамические объекты, в то время как options имеет фиксированное количество элементов.Есть идеи, что здесь происходит, ребята?Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Попробуйте это:

options.forEach(opt=>{
    sameAccountArray.forEach(acObj=>{
      if (opt.optNumber === acObj.optNumber) opt.exist = acObj.exist;
    })
})
0 голосов
/ 27 ноября 2018
    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);
0 голосов
/ 27 ноября 2018

Метод map () создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

Вы не можете изменять свои массивы с помощью функции map(), но только создать новый массив с результатами, которые вы хотите.

...