【问题标题】:Define names for JS object properties为 JS 对象属性定义名称
【发布时间】:2019-05-20 11:37:54
【问题描述】:

我有一个看起来像这样的对象

{taxi: 1, food: 1, cinema: 2, drinks: 2}

我的目标是为这些属性定义一个名称,如下所示:

const expenseCategories = [
  { name: 'taxi', value: 1 },
  { name: 'food', value: 1 },
  { name: 'cinema', value: 2 },
  { name: 'drinks', value: 2},
];

这是我的尝试,我离我想要完成的目标还很远。我知道这很简单,但我很困惑..

  var test = [];

  for (let x in expenseCategories) {
    // expenseCatAmountsObj.push(expenseCategories[x]);
    test.push( Object.defineProperty({}, {name : x}, { value: expenseCategories[x] }) )
  } 

它只是在对象内部返回一个数组

[{…}、{…}、{…}、{…}]

【问题讨论】:

标签: javascript


【解决方案1】:

您可以使用Object.entriesArray.prototype.map

let obj = {taxi: 1, food: 1, cinema: 2, drinks: 2}

let out = Object.entries(obj).map(([name, value]) => ({name, value}));
console.log(out)

【讨论】:

    【解决方案2】:

    我们可以使用 map 遍历对象的键,这将返回一个结果数组:

    let categories = {taxi: 1, food: 1, cinema: 2, drinks: 2};
    
    let test = Object.keys(categories).map(k => {
        return { name: k, value: categories[k] }
    });
    
    console.log(test);

    【讨论】:

      【解决方案3】:
      const temp = {taxi: 1, food: 1, cinema: 2, drinks: 2};
      
      let expenseCategories = Object.keys(temp).map(key => ({name: key, value: temp[key]}));
      

      【讨论】:

        【解决方案4】:

        您可以使用Object.keys

        let obj = {taxi: 1, food: 1, cinema: 2, drinks: 2}
        let arr = []
        
        let keys = Object.keys(obj)
        
        for (let i = 0; i < keys.length; i++) {
            let key = keys[i]
            arr[i] = {name: key, value: obj[key]}
        }
        
        console.log(arr)

        【讨论】:

          【解决方案5】:

          你的步骤几乎是正确的——只有Object.defineProperty({}, {name : x}, { value: expenseCategories[x] }) 是不需要的,因为它是做你想做的事情的过于复杂的方式。相反,只需使用对象文字:

          var expenseCategories = { taxi: 1, food: 1, cinema: 2, drinks: 2 }
          
          var test = [];
          
          for (let x in expenseCategories) {
            test.push(
              {
                name: x,
                value: expenseCategories[x]
              }
            )
          }
          
          console.log(test)

          另一种方法是遍历Object.entries 并使用Array#mapdestructuringshort object initialisation syntax 生成一个数组:

          var expenseCategories = { taxi: 1, food: 1, cinema: 2, drinks: 2 }
          
          var test = Object.entries(expenseCategories)
            .map(([name, value]) => ({name, value}))
          
          console.log(test)

          【讨论】:

            猜你喜欢
            • 2014-11-01
            • 2021-08-22
            • 2019-12-31
            • 2011-02-17
            • 2013-05-30
            • 2011-02-20
            • 2015-01-18
            • 2013-07-30
            相关资源
            最近更新 更多