Карта массива JavaScript с сохранением оригинальных элементов в массиве - PullRequest
1 голос
/ 22 июня 2019

У меня есть этот массив.

const data = [
  { name: "A", age: "12" },
  { name: "B", age: "5" },
  { name: "C", age: "6" }
];

Я хочу добавить к этому массиву дополнительное свойство с именем key следующим образом.

const data = [
  { name: "A", age: "12", key: "A12" },
  { name: "B", age: "5", key: "B5" },
  { name: "C", age: "6", key: "C6" }
];

Я устал от этой функции карты, и выводне тот, которого я ожидаю.Как мне добиться этого с помощью функции карты JS ..

const data = [
  { name: "A", age: "12"},
  { name: "B", age: "5"},
  { name: "C", age: "6"}
];

console.log(
  "MAP",
  data.map(element => (element.key = element.name + element.age))
);

Ответы [ 3 ]

4 голосов
/ 22 июня 2019

Вам необходимо вернуть объект из map обратного вызова:

const data = [
  { name: "A", age: "12"},
  { name: "B", age: "5"},
  { name: "C", age: "6"}
];

console.log(
  data.map(({ name, age }) => ({ name, age, key: name + age }))
);

Если вы хотите изменить существующие объекты, используйте forEach вместо .map:

const data = [
  { name: "A", age: "12"},
  { name: "B", age: "5"},
  { name: "C", age: "6"}
];

data.forEach((obj) => {
  obj.key = obj.name + obj.age;
});
console.log(data);
3 голосов
/ 22 июня 2019

Возврат element, а также через запятую:

const data = [
  { name: "A", age: "12"},
  { name: "B", age: "5"},
  { name: "C", age: "6"}
];

console.log(data.map(element => (element.key = element.name + element.age, element)));
.as-console-wrapper { max-height: 100% !important; top: auto; }

Или просто измените ваш обратный вызов map, чтобы упростить его при деструктуризации:

const data = [
  { name: "A", age: "12"},
  { name: "B", age: "5"},
  { name: "C", age: "6"}
];

console.log(data.map(({ name, age }) => ({ name, age, key: name + age})));
.as-console-wrapper { max-height: 100% !important; top: auto; }
1 голос
/ 22 июня 2019

Есть несколько способов сделать это, и Array.map - безусловно, самый краткий и чистый способ сделать это, как уже было предоставлено.Вот несколько других методов:

 const data = [ { name: "A", age: "12" }, { name: "B", age: "5" }, { name: "C", age: "6" } ];

let from = Array.from(data, ({name, age}) => ({name, age, key: name+age}))
let assign = data.map(({name, age}) => Object.assign({name, age}, {key: name+age}))

console.log('from: ', from)
console.log('assign: ', assign)

Если вы хотите сгенерировать ключ из всех values (при условии, что все являются примитивами), вы также можете сделать это:

const data = [
  { name: "A", age: "12", city: 'Miami' },  // "key": "A12Miami"
  { name: "B", age: "2", gender: 'M'},      // "key": "B2M"
];

let all = data.map(obj => 
  ({...obj, ...Object.fromEntries([['key', Object.values(obj).join('')]])}))

console.log(all)

Таким образом, вам не нужно указывать поп-имена или заботиться о них и т. Д.

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