我有一个如下的javascript对象。
{
name: "tom",
age: 5,
fruits: [
{name: "apple",qty: 4},
{name: "orange",qty: 13},
{name: "banana",qty: 3}
]
}
我正在尝试将此对象转换为下面给出的对象。
{
name: "tom",
age: 5,
apple: 4,
orange: 13,
banana: 3
}
我该如何实现?我试图遍历fruits数组,但是无法找到一种使用水果名称创建变量并将数量分配给它的方法。
答案 0 :(得分:2)
您可以使用forEach
和delete
清理旧密钥。不过请注意不要意外覆盖密钥(您可以测试if (e.name in obj)
作为安全检查)。
const obj = {
name: "tom",
age: 5,
fruits: [
{name: "apple",qty: 4},
{name: "orange",qty: 13},
{name: "banana",qty: 3}
]
};
obj.fruits.forEach(e => obj[e.name] = e.qty);
delete obj.fruits;
console.log(obj);
答案 1 :(得分:1)
您可以使用以下简单代码
var b={
name: "tom",
age: 5}
for (var i = 0; i<a.fruits.length; i++) {
b[a.fruits[i].name]=a.fruits[i].qty;
}
答案 2 :(得分:0)
这是一个通用函数,如果您不想变异原始对象,可以进行转换。 Destructure个对象,分别获取属性fruits
和rest
。然后,您可以使用Object.assign()
和map
创建一个新对象。
let obj = {
name: "tom",
age: 5,
fruits: [
{name: "apple",qty: 4},
{name: "orange",qty: 13},
{name: "banana",qty: 3}
]
}
const converter = ({ fruits, ...rest }) =>
Object.assign(rest, ...fruits.map(({ name, qty }) => ({ [name]: qty })))
console.log(converter(obj))