lodash:仅深度复制数组中的几个属性

lodash: deep copy only few properties from an array

我有一个具有以下属性的数组

data = [ { 'id' : 1,
'name': 'xyz',
'age': 21,
'gender': 'M',
'address': '123 xyz'},
{ 'id' : 2,
'name': 'abc',
'age': 23,
'gender': 'F',
'address': '456 abc'}
]

我正在尝试构建一个只有少数属性的新数组,并像这样更新 属性(地址)

data1= [ { 'id' : 1, 'name': 'xyz', 'address1': '123 xyz'}, { 'id' : 2, 'name': 'abc', 'address1': '456 abc'} ]

我尝试使用映射和删除函数。 但想看看是否有一种简单的方法可以做到这一点。我尝试使用一些 lodash 函数的组合但没有成功。

let data1 = data.map(d => {
return {'id' : d.id, 'name': d.name, 'address1': d.address}
})

一个简单的地图就够了,不需要任何库

只使用 map function 怎么样?

var data = [{
    'id': 1,
    'name': 'xyz',
    'age': 21,
    'gender': 'M',
    'address': '123 xyz'
  },
  {
    'id': 2,
    'name': 'abc',
    'age': 23,
    'gender': 'F',
    'address': '456 abc'
  }
];

var data1 = data.map(x => ({id: x.id, name: x.name, address1: x.address}));

// modify data
data[0].id = 3;

// only data has been modified, not data1
console.log(data);
console.log(data1);

我将使用 map 解构,并使用 shorthand 属性 符号来创建新对象:

// Extracts `id`, `name`, and `address`...
//     \−−−−−−−−−−−−−−−  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
const result = data.map(({id, name, address: address1}) => ({id, name, address1}));
// Renames `address` to `address1` −−−−−−−−^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^
// Builds new object with result −−−−−−−−−−−−−−−−−−−−−−−−−−/

实例:

const data = [ { 'id' : 1,
'name': 'xyz',
'age': 21,
'gender': 'M',
'address': '123 xyz'},
{ 'id' : 2,
'name': 'abc',
'age': 23,
'gender': 'F',
'address': '456 abc'}
];

const result = data.map(({id, name, address: address1}) => ({id, name, address1}));

console.log(result);

或者您可以在创建新对象时进行重命名:

const result = data.map(({id, name, address}) => ({id, name, address1: address}));