有没有一种方法可以改进此代码以将对象转换为映射数组?
我想出了这个解决方案,是否有更好的方法和更清洁的方法?
let productItems = {
'Item1': {
quantity: 4,
name: 4,
price: 123
},
'Item2': {
quantity: 1,
name: 3,
price: 144
},
'Item3': {
quantity: 2,
name: 2,
price: 343
}
}
let items = [];
for (const item in productItems) {
const formatItem = {
"Qty": productItems[item].quantity,
"Cost": productItems[item].price
}
items.push(formatItem);
}
输出:
[ { Qty: 4, Cost: 123 },
{ Qty: 1, Cost: 144 },
{ Qty: 2, Cost: 343 } ]
答案 0 :(得分:6)
您可以使用Object.values()
Object.values()
方法返回给定对象自己的可枚举属性值的数组,其顺序与for...in
循环所提供的顺序相同(区别是for-in循环枚举了原型链)。
map()
方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
let productItems = {
'Item1': {
quantity: 4,
name: 4,
price: 123
},
'Item2': {
quantity: 1,
name: 3,
price: 144
},
'Item3': {
quantity: 2,
name: 2,
price: 343
}
}
let items = Object.values(productItems).map(i => ({Qty: i.quantity, Cost: i.price}));
console.log(items);
答案 1 :(得分:1)
Object.values可以正常工作。如果您想访问键和值,则可以将Object.entries与map一起使用
Object.entries({
'Item1': {
quantity: 4,
name: 4,
price: 123
},
'Item2': {
quantity: 1,
name: 3,
price: 144
},
'Item3': {
quantity: 2,
name: 2,
price: 343
}}).map(([key, {quantity, price}]) => ({Qty: quantity, Cost: price}))