将对象转换为映射数组?

时间:2018-12-11 17:52:26

标签: javascript arrays node.js object

有没有一种方法可以改进此代码以将对象转换为映射数组?

我想出了这个解决方案,是否有更好的方法和更清洁的方法?

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 } ]

2 个答案:

答案 0 :(得分:6)

您可以使用Object.values()

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for...in循环所提供的顺序相同(区别是for-in循环枚举了原型链)。

Array.prototype.map()

  

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}))