объединение двух многомерных массивов с одинаковым индексом

1

Javascript

Я пытаюсь либо объединить 2 многомерных массива с одним индексом, либо рандомизировать один и тот же индекс обоих массивов.

var arr1 = [[a, b, c], [d, e], [f, g, h, i]]
var arr2 = [[1, 2, 3], [5, 6], [7, 8, 9, 10]]

preferredResult = [{a: 1, b: 2, c: 3}, {d: 5, e:6}, {f: 7, g: 8, h: 9, i: 10}]

Я пробовал.maps, вложенные для циклов,.push в разных вариантах и не смог понять это.

В качестве альтернативы, если бы я мог выяснить, как случайным образом распределить два массива массивов таким же образом, это тоже будет работать, то есть: буквы в arr1 [0] и числа в arr2 [0] могут быть установлены в одну и ту же рандомизацию, тогда arr1 [1] & arr2 [1] и т.д.

  • 1
    ваш предпочтительный результат должен быть [ {a: 1, b: 2, c: 3}, {d: 5, e:6}, {f: 7, g: 8, h: 9, i: 10}] . внутренние элементы должны быть объектами, а не массивами.
  • 0
    Ах да, спасибо.
Показать ещё 1 комментарий
Теги:

5 ответов

0

Использовать метод map & forEach

var arr1 = [
    ['a', 'b', 'c'],
    ['d', 'e'],
    ['f', 'g', 'h', 'i']
  ],
  arr2 = [
    [1, 2, 3],
    [5, 6],
    [7, 8, 9, 10]
  ],
  m = arr1.map(function(item, index) {
    let tempObj = {};
    item.forEach(function(item2, index2) {
      tempObj[item2] = arr2[index][index2];
    });
    return tempObj;
  });
console.log(m)
0

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

const arr1 = [['a', 'b', 'c'], ['d','e' ], ['f', 'g', 'h', 'i']],
      arr2 = [[1, 2, 3], [5, 6], [7, 8, 9, 10]],
      result = arr1.map(function(a, i){
        return a.reduce(function(r, v, j){
          r[v] = arr2[i][j];
          return r;
        }, {});
      });
      
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0

Использование встроенных for циклов

var arr1 = [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h', 'i']]
var arr2 = [[1, 2, 3], [5, 6], [7, 8, 9, 10]]

var result = []
for (let i = 0; i < arr1.length; i++){
    let obj = {};
    for (let j = 0; j < arr1[i].length; j++){
        obj[arr1[i][j]]=arr2[i][j]
    }
    result.push(obj);
}
console.log(result)
  • 0
    Это создание объекта для каждого элемента из arr1
  • 0
    @brk, хорошо, я отредактирую свой ответ!
0

Lodash может быть очень полезным.

var arr1 = [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h', 'i']]
var arr2 = [[1, 2, 3], [5, 6], [7, 8, 9, 10]]

var out = _.zipWith(arr1, arr2, (x,y)=>_.fromPairs(_.zip(x,y)));
console.log(out)
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

zip объединит 2 массива в пары, а zipWith сделает то же самое, но вы можете выбрать, как их объединить.

0
function merge(arr1, arr2) {
   return arr1.map(function (arr, i) {
      return mergeIntoObject(arr1[i], arr2[i])); 
   };
}

function mergeIntoObject(arr1, arr2) {
  var result = {};
  arr1.forEach((arr, i) => {
    result[arr1[i]] = arr2[i];
  });
  return result;
}

merge(arr1, arr2);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню