在数组映射中转换某些属性名称的优雅方式

Jer*_*ter 2 javascript arrays ecmascript-6

认为...

let A = [{ x:'x', y:'y' }, { x:'x', y:'y' }];
Run Code Online (Sandbox Code Playgroud)

我知道我可以将这个数组转换成一个新的数组,并y像这样重命名该属性......

A.map(o => ({ v: o.y }));
// [{ v:'y' }, { v:'y' }]
Run Code Online (Sandbox Code Playgroud)

而且我可以使用价差来获取所有现有属性以及像这样经过转换的新属性...

A.map(o => ({ ...o, ...{ v: o.y } }));
// [{ x:'x', y:'y', v:'y' }, { x:'x', y:'y', v:'y' }]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种优雅的方法可以简单地将y属性重命名为v. 所以这就是我想要的。

// [{ x:'x', v:'y' }, { x:'x', v:'y' }]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在我的粗箭头函数上使用一个函数块,添加一个v属性,然后删除这个y属性,但这很麻烦。我正在寻找优雅的东西。

amr*_*ngh 5

您可以使用 Array.map() 和 Object destructing :

let A = [{ x:'x', y:'y' }, { x:'x', y:'y' }];

let result = A.map(({y,...rest})=> ({...rest,v:y}));

console.log(result);
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

您可以重命名属性并使用对象的其余语法来获取所有其他属性。对于映射,采用剩余的参数和新的属性。

let A = [{ x: 'x', y: 'y' }, { x: 'x', y: 'y' }];

console.log(A.map(({ y: v, ...o }) => ({ ...o, v })));
Run Code Online (Sandbox Code Playgroud)