Добавление чисел внутри массива массивов - PullRequest
0 голосов
/ 09 июля 2020

Здесь я пытаюсь добавить номер массива отдельно, но не могу добиться ожидаемого результата. Если я хочу сложить общую сумму, я бы сделал flatMap и сложил их вместе. Но я хочу добавить их отдельно для каждого массива.

Ниже приведен фрагмент того, что я пробовал

const data = [{
    "itemDetails": [{
      "sizeOfBag": 1,
      "numberOfBags": 1,
      "quantityInBag": 1.0
    }]
  },
  {

    "itemDetails": [{
        "sizeOfBag": 1,
        "numberOfBags": 1,
        "quantityInBag": 1.0
      },
      {
        "sizeOfBag": 10,
        "numberOfBags": 1,
        "quantityInBag": 1.0
      }
    ],

  }
]
const newData = data.map(f => f.itemDetails);
console.log(newData);

for (let i = 0; i <= newData.length; i++) {
  const addData = newData.reduce((acc, newData) => acc + newData[i].sizeOfBag, 0);
}
console.log(addData);

Ожидаемый результат: [1,11]

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Вам нужно вызвать reduce для вложенных массивов, а не для массива newData верхнего уровня. Вы можете объединить все эти вызовы, используя map, чтобы получить массив результатов.

const data = [{
    "itemDetails": [{
      "sizeOfBag": 1,
      "numberOfBags": 1,
      "quantityInBag": 1.0
    }]
  },
  {

    "itemDetails": [{
        "sizeOfBag": 1,
        "numberOfBags": 1,
        "quantityInBag": 1.0
      },
      {
        "sizeOfBag": 10,
        "numberOfBags": 1,
        "quantityInBag": 1.0
      }
    ],

  }
]
const newData = data.map(f => f.itemDetails);
console.log(newData);

const addData = newData.map(d => d.reduce((acc, x) => acc + x.sizeOfBag, 0));

console.log(addData);
1 голос
/ 09 июля 2020

Сделайте это так, запустите функцию уменьшения внутри вашей карты:

data.map(f => f.itemDetails.reduce((acc, i) => acc + i.sizeOfBag, 0));
1 голос
/ 09 июля 2020

Вы можете использовать map и reduce.

const res = newData.map(arr=>arr.reduce((acc,curr)=>acc+curr.sizeOfBag,0));

Ваша попытка с for l oop близка, но вы проходите цикл мимо последнего индекса и смешиваете свой индекс с именами свойств.

for (let i = 0; i < newData.length; i++) {
  newData[i] = newData[i].reduce((acc, newData) => acc + newData.sizeOfBag, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...