Преобразовать массив в карту с предопределенными ключами - PullRequest
2 голосов
/ 25 марта 2020

У меня есть данные в массиве, которые выглядят так:

let data = {[val1, val2, val3], [val4, val5, val6]}

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

let keys = [key1, key2, key3]

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

0: {key1:value1, key2:value2, key3:value3}
1: {key1:value4, key2:value5, key3:value6}

Я пытался:

let obj = Object.assign(keys, data)

Но вывод:

0: (3) [value1, value2, value3]
1: (3) [value4, value5, value6]

Ответы [ 3 ]

2 голосов
/ 25 марта 2020

Вы можете использовать функции .map() и .reduce() для получения желаемого результата:

let data = [['val1', 'val2', 'val3'], ['val4', 'val5', 'val6']];
let keys = ['key1', 'key2', 'key3'];

let result = data.map(
  vals => vals.reduce((r, c, i) => (r[keys[i]] = vals[i], r), {})
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2 голосов
/ 25 марта 2020

Используйте Object.fromEntries и карту

const data = [
  [1, 2, 3],
  [4, 5, 6]
];
const keys = ["key1", "key2", "key3"];

const updated = data.map(arr =>
  Object.fromEntries(arr.map((item, i) => [keys[i], item]))
);

console.log(updated);
2 голосов
/ 25 марта 2020

Простое решение.

let data = [
  [1, 2, 3],
  [4, 5, 6]
];
let keys = ["key1", "key2", "key3"];

const res = data.map(([v1, v2, v3]) => {
  return {
    [keys[0]]: v1,
    [keys[1]]: v2,
    [keys[2]]: v3
  };
});

console.log(res);
// Also
const res2 = data.map(arr => {
  let map = {};
  keys.forEach((key, index) => {
    map[key] = arr[index];
  });
  return map;
});
console.log(res2);
// Also
const res3 = data.map(arr =>
  keys.reduce((o, key, index) => {
    o[key] = arr[index];
    return o;
  }, {})
);
console.log(res3);
.as-console-wrapper { max-height: 100% !important; top: 0; color: blue; background: #fff}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...