Есть ли способ использовать функцию Array.map в Javascript, чтобы вернуть добавленную к нему пару объект + новое значение ключа - PullRequest
0 голосов
/ 05 июня 2018

Что я хочу сделать, это сопоставить объекты массива, чтобы добавить еще одну пару ключ-значение.

Например:

var arr = [{    "name": "ABC",    "id": 1    },
{    "name": "XYZ",    "id": 2    },
{    "name": "QWE",    "id": 3    }];

var arr2 = arr.map( x => x.id_name = x.id + ' - ' + x.name);

console.log('arr = ', arr);
console.log('arr2 = ',arr2);

Изменяет исходный массив, как и ожидалось, но возвращает массив только с именем x.id_name.

Ответы [ 6 ]

0 голосов
/ 05 июня 2018

Это то, что я бы сделал

arr.map(elem => ({...elem, ['id_name']: `${elem.id}-${elem.name}`}))
0 голосов
/ 05 июня 2018

Из вашей реализации вы сказали map вернуть x.id_name.Как и в случае со стрелками, вы можете вернуться из нее двумя способами

напрямую с помощью одного возврата

array.map(item => single_line_expression)
  // example
  [1,2,3,4].map(n => n*4)
  result :
    [4, 8, 12, 16]

операторов блока

array.map(item => {
  statements 
  return what_should_be_replace_by_item
})

// example
[1,2,3,4].map(n => {
  const multi = n*4
  return multi
})
result :
 [4, 8, 12, 16]
0 голосов
/ 05 июня 2018

С новым свойством того же объекта вы изменяете его, присваивая значение.

Вам нужен новый объект без ссылки на старый объект, используя Object.assign и сопоставьте этот объект.

var array = [{ name: "ABC", id: 1 }, { name: "XYZ", id: 2 }, { name: "QWE", id: 3 }],
    newArray = array.map(o => Object.assign({}, o, { id_name: [o.id, o.name].join(' - ') }));

console.log(newArray);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 05 июня 2018

Вы должны вернуть весь объект:

arr.map(x => {
  x.id_name = x.id + ' - ' + x.name
  return x
})

Или более элегантно, поскольку это не изменяет исходный массив:

add.map(({id, name}) => ({
  id,
  name,
  id_name: `${id} - ${name}`
}))
0 голосов
/ 05 июня 2018
var x = arr.map(function(x) { return { name: x.name, test: 'bob' + x.name } });

Это должно помочь вам в пути

0 голосов
/ 05 июня 2018

Если вы хотите изменить исходный массив , используйте Array.forEach

let arr = [{"name": "ABC","id": 1},{"name": "XYZ","id": 2},{"name": "QWE","id": 3}];

arr.forEach( x => x.id_name = x.id + ' - ' + x.name);
console.log(arr);

Если вы хотите сохранить исходный массив , используйте Array.map

let arr = [{"name": "ABC","id": 1},{"name": "XYZ","id": 2},{"name": "QWE","id": 3}];

let arr1 = arr.map(({id,name}) => ({id, name, "id_name" : id + ' - ' + name}));
console.log(arr1); // udpated
console.log(arr); // same
...