Как объединить вложенные массивы и добавить их длины по индексу вложенного массива? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть массив с некоторыми вложенными массивами (код ниже описывает ситуацию, когда каждый вложенный массив имеет два вложенных массива, это число может варьироваться, оно может быть пять, но в этом сценарии мы знаем, что все онибудет иметь пять вложенных массивов) с различной длиной.Что-то вроде:

let arrayA = [
              [['a']            , ['b','c','d']],  //lengths  1  and  3 
              [['e','f','g','z'], ['h','i','j']],  //lengths  4  and  3
              [['k','l']        , ['m','n']]       //lengths  2  and  2 
                                                   //sums     7  and  8
             ]

Мы хотим добавить длины каждого подполосы к индексу подмассива, к которому они принадлежат:

let arrayB = [[7],[8]] 

Как лучше всегочтобы достичь этого?

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Вы можете уменьшить массив, выбрав свойство длины для отображения суммы.Затем оберните результаты в другой массив.

var array = [[['a'], ['b', 'c', 'd']], [['e', 'f', 'g', 'z'], ['h', 'i', 'j',]], [['k', 'l'], ['m', 'n']]],
    result = array
        .reduce((r, a) => a.map(({ length }, i) => (r[i] || 0) + length), [])
        .map(a => [a]);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 07 октября 2018

Создать новый массив длиной только первого подмассива из исходного массива.Затем с помощью slice создайте другой массив, состоящий из элемента от индекса 1 до его длины из исходного массива.

Затем используйте forEach и используйте index

let arrayA = [
  [
    ['a'],
    ['b', 'c', 'd']
  ],
  [
    ['e', 'f', 'g', 'z'],
    ['h', 'i', 'j', ]
  ],
  [
    ['k', 'l'],
    ['m', 'n']
  ]
]

let initialElem = arrayA[0].map((item) => {
  return [item.length]
})
let secElem = arrayA.slice(1, arrayA.length).forEach(function(item, index) {
  if (Array.isArray(item)) {
    item.forEach(function(elem, index2) {
      initialElem[index2][0] = initialElem[index2][0] + elem.length
    })
  }

})
console.log(initialElem)
0 голосов
/ 07 октября 2018

Вы можете использовать reduce для суммирования массива.Используйте forEach для цикла по внутреннему массиву.

let arrayA = [[["a"],["b","c","d"]],[["e","f","g","z"],["h","i","j"]],[["k","l"],["m","n"]]];

let result = arrayA.reduce((c, v) => {
  v.forEach((o, i) => {
    c[i] = c[i] || [0];
    c[i][0] += o.length;
  })
  return c;
}, []);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...