Преобразование объекта в массив объектов

Я пытаюсь объединить эти два массива объектов в один массив объектов, объединив каждое свойство со своими значениями.

var a ={'a':[1,2,3,4],'b':[2,3,4,5]}

to [{'a':1,'b':2},{'a':2,'b':3},{'a':3,'b':4},{'a':4,'b':5}]

Как я могу добиться этого, используя библиотеку lodash?


person Sourabh Slk    schedule 10.09.2019    source источник
comment
что ты уже испробовал?   -  person Maheer Ali    schedule 10.09.2019
comment
Пожалуйста, не спрашивайте о решениях, не попробовав сначала решить проблему самостоятельно. Если вы что-то пробовали, пожалуйста, поделитесь в своем вопросе, что вы пробовали.   -  person Cal Irvine    schedule 10.09.2019
comment
Я проверил все методы lodash по умолчанию, если они есть, но не смог найти.   -  person Sourabh Slk    schedule 10.09.2019
comment
Проверено stackoverflow.com /questions/32100692/ Но там значение не является массивом, поэтому нужна помощь, как это сделать через lodash   -  person Sourabh Slk    schedule 10.09.2019
comment
Lodash — хороший небольшой набор инструментов, но вам не обязательно обязательно его использовать. Это вполне выполнимо с помощью нескольких строк Javascript.   -  person Jeremy Thille    schedule 10.09.2019
comment
Привет, не могли бы вы помочь мне с обычным способом js ..?   -  person Sourabh Slk    schedule 10.09.2019


Ответы (1)


Вам нужно перебрать значения для одного из ключей, а затем для каждого значения — перебрать все ключи. Это можно сделать в чистом JavaScript довольно легко.

например [ 1, 2, 3, 4 ] для ключа a, затем выполните цикл по этим ключам: [ 'a', 'b' ]

Примечание. Вы увидите, что параметр '_' (подчеркивание) используется в качестве первого параметра для приведенного ниже сопоставления. Это представляет текущее значение в списке для значения ключа 'a'. Это бессмысленно, но нам нужно, чтобы он был там, чтобы получить доступ к следующему параметру (индексу текущего значения).

// Code Golf - zipObjects (100 bytes)
var z=a=>(x=>a[x[0]].map((_,i)=>x.reduce((o,k)=>Object.assign(o,{[k]:a[k][i]}),{})))(Object.keys(a))

function zipObjects(arr) {
  return (keys => {
    return arr[keys[0]].map((_, valueIndex) => {
      return keys.reduce((obj, key) => {
        return Object.assign(obj, {[key] : arr[key][valueIndex]});
      }, {});
    });
  })(Object.keys(arr));
}

console.log(zipObjects({ 'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5] }));
.as-console-wrapper { top: 0; max-height: 100% !important; }

С лодашем

Вы можете объявить функцию плагина очень похожим образом.

_.mixin({
  'zipObjects' : function(arr) {
    return (keys => {
      return _.map(arr[_.head(keys)], (value, valueIndex) => {
        return _.reduce(keys, (obj, key) => {
          return _.assignIn(obj, {[key] : arr[key][valueIndex]});
        }, {});
      });
    })(_.keys(arr));
  }
});

console.log(_.zipObjects({ 'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5] }));
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.core.min.js"></script>

person Mr. Polywhirl    schedule 10.09.2019