【问题标题】:Convert object to mapped Array?将对象转换为映射数组?
【发布时间】:2019-05-12 18:33:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript arrays node.js object


    【解决方案1】:

    您可以使用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);

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • Object.entries(obj) 返回一个数组数组。您提供的示例将无法按预期工作。不过,使用数组解构很容易修复:[key, item] => (...)
      • 这仍然是错误的。您应该阅读Object.entries() 的文档并在发布之前测试您的代码。
      • 非常抱歉,这很尴尬。我已经更新了答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多