Как объединить 2 массива в 1 объект JavaScript - PullRequest
0 голосов
/ 12 января 2019

У меня есть 2 массива, которые я хочу «уменьшить» в 1 объект.

так, например:

У меня есть ..

var originalData = [1,2,3];

var newData = [3,1,2];

Я хочу объединить эти два массива в объект, который выглядит следующим образом:

var newOrderObject = {1:3, 2:1, 3:2};

Я использую функцию редукции, но, похоже, они отображаются по-другому

var newOrderObject = originalData.reduce(function(newData) {
  var orderObject = {};
  originalData = newData;
  return orderObject;
}, {});

любые предложения будут оценены

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Вы можете отобразить отдельные объекты и назначить их одному объекту. Если возможны пустые массивы, используйте пустой объект в качестве целевого значения.

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign({}, ...keys.map((k, i) => ({ [k]: values[i] })));

console.log(object);

Более чистым подходом было бы перенести массивы в массив пар ключ / значение и затем отобразить объект.

const transpose = (r, a) => a.map((v, i) => (r[i] || []).concat(v));

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign(
        {},
        ...[keys, values]
            .reduce(transpose, [])
            .map(([k, v]) => ({ [k]: v }))
    );

console.log(object);
0 голосов
/ 12 января 2019

Вы просто используете .reduce неправильно.

  • Первый аргумент его обратного вызова - это аккумулятор объект, который вы проходить.
  • 2-й элемент - это повторяющийся элемент.
  • Третий - индекс.

Используйте все 3, и вы получите желаемый результат.

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(acc, item, i) {
  return Object.assign(acc, { [item]: newData[i] })
}, {});

console.log(newOrderObject)
0 голосов
/ 12 января 2019

Уменьшите 1-й массив (ключи) и возьмите значения из 2-го массива, используя index:

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(obj, key, index) {
  obj[key] = newData[index];
  return obj;
}, {});

console.log(newOrderObject);
...