如何将对象数组转换为具有相同值但键已修改的对象数组?

时间:2019-09-25 14:59:46

标签: javascript ecmascript-6

我有一个包含对象的数组,并希望将其转换为包含相同值但键名不同的数组。 (JavaScript)

例如,一个数组

[{name: "Bob", age: 50, person: true}, {name: "Jerry", age: 20, person: true}]

成为

[{identification: "Bob", years: 50, person: true}, {identification: "Jerry", years: 20, person: true}]

3 个答案:

答案 0 :(得分:3)

在这里使用Map功能非常完美。

const people = [
    {name: "Bob", age: 50, person: true},
    {name: "Jerry", age: 20, person: true}
];

const formatted = people.map((person) => ({
    identification: person.name,
    years: person.age,
    person: person.person
});

这应该可以解决此问题。

答案 1 :(得分:0)

我认为您可以使用 map 方法,此方法返回的数组长度与要映射的数组长度相同:


 const array = [{name: "Bob", age: 50, person: true}, {name: "Jerry", age: 20, person: true}];

let newKeysArray = array.map( a => { 
   let obj = { 
        identification: person.name,
        years: person.age,
        person: person.person
   };
   return obj
 } );

因此,在地图内部,您需要为新对象分配所需的值,并返回该对象作为映射项。

答案 2 :(得分:0)

如果您希望在适当位置修改对象,则可以通过nverba here使用策略:

let rows = [
    {name: "Bob", age: 50, person: true}, 
    {name: "Jerry", age: 20, person: true}
];

let keyMaps = [
    ['name', 'identification'],
    ['age', 'years'],
];

for(let keyMap of keyMaps)
for(let row of rows)
    delete Object.assign(row, {[keyMap[1]]: row[keyMap[0]] })[keyMap[0]];

console.log(rows);

keyMap[1]是新密钥。 keyMap[0]是旧密钥。 Object.assign取旧键的值并将其放在新键中。 delete关键字令人困惑,但不适用于整个row。只是删除旧密钥。