如果您可以确定old对象中键的顺序永远不会改变并且永远不会缺少键,那么您可以执行以下操作:
const newKeys = ['newId', 'newFirstName', 'newLastName']
const transform = obj => Object.fromEntries(
Object.entries(obj)
.slice(0, newKeys.length)
.map(([key, value], index) => [newKeys[index], value])
)
const oldArray = [
{
oldId: 1,
oldFirstName: 'A',
oldLastName: 'B',
unimportant: 'x'
},
{
oldId: 2,
oldFirstName: 'C',
oldLastName: 'D',
unimportant: 'x'
}
]
const newArray = oldArray.map(transform)
console.log(newArray)
/* Result:
[
{
newId: 1,
newFirstName: 'A',
newLastName: 'B'
},
{
newId: 2,
newFirstName: 'C',
newLastName: 'D'
}
]
*/
有什么transform作用:
- 它将表单中的数据
{oldId: 1, oldFirstName: 'A', oldLastName: 'B', unimportant: 'x'}转换为[['oldId', 1], ['oldFirstName', 'A'], ['oldLastName', 'B'], ['unimportant', 'x']]using Object.entries,以便我们可以在其上使用数组方法。
- 它会切断任何超出使用指定的“新键”数量的条目
slice,这样“不重要的数据”就不会被处理,因此[['oldId', 1], ['oldFirstName', 'A'], ['oldLastName', 'B'], ['unimportant', 'x']]变成[['oldId', 1], ['oldFirstName', 'A'], ['oldLastName', 'B']].
- 它是从到
map的所有条目,根据当前条目的索引(它在对象中的数量)从数组中查找,因此变为。[key, value][newKey, value]newKeynewKeys[['oldId', 1], ['oldFirstName', 'A'], ['oldLastName', 'B']][['newId', 1], ['newFirstName', 'A'], ['newLastName', 'B']]
- 它将修改后的数据从表单
[['newId', 1], ['newFirstName', 'A'], ['newLastName', 'B']]转换回{newId: 1, newFirstName: 'A', newLastName: 'B'}使用Object.fromEntries.
最后,我们只需使用map.
注意:如果您的 ECMAScript 版本没有Object.fromEntries,您可以使用 polyfill:Object.fromEntries = a => a.reduce((o, [k, v]) => Object.assign(o, { [k]: v }), {})