【问题标题】:How to remove key from Array of Object如何从对象数组中删除键
【发布时间】:2023-03-03 23:03:01
【问题描述】:

我有像下面这样的数组对象,如何将此格式转换为对象数组并删除键。

{
  "9417702107": {
    "name": "Sunny",
    "phone": "9417702107",
    "exists": true
  },
  "8826565107": {
    "name": "Gurwinder",
    "phone": "8826565107",
    "exists": true
  }
}

如何使用 javascript 将其转换为以下格式:

[{
  "name": "Sunny",
  "phone": "9417702107",
  "exists": true
}, {
  "name": "Gurwinder",
  "phone": "8826565107",
  "exists": true
}]

【问题讨论】:

    标签: javascript arrays json


    【解决方案1】:

    使用简单的循环:

    array = [];
    for (var key in obj) {
        array.push(obj[key]);
    }
    

    与其他答案一样,不能保证数组元素的顺序与对象中的顺序相同。

    【讨论】:

      【解决方案2】:

      试试这个

      var output = Object.keys(obj).map(function(key){
        return obj[key];
      })
      

      请注意,不能保证output 数组中的项目顺序与您看到的对象中的键值顺序相同。

      如果顺序很重要,则在对象本身中添加一个名为 order 的新属性

      var obj {
      "9417702107": 
       {
        "name": "Sunny",
        "phone": "9417702107",
        "exists": true,
        "order_sequence" : 1
      },
      "8826565107": {
        "name": "Gurwinder",
        "phone": "8826565107",
        "exists": true,
        "order_sequence" : 1
      }
      }
      

      然后转换成数组后,就可以在order_sequence上排序了

      var output = Object.keys(obj).map(function(key){
        return obj[key];
      }).sort( function(a,b){
         return a.order_sequence - b.order_sequence;
      });
      

      【讨论】:

      • 但请注意,无法保证元素在结果数组中出现的顺序
      • @Alnitak 是的,如果这个数组是动态生成的,那就是真的。
      • @gurvinder372 那么还有什么选择。 vire.??
      • @SunnyDhiman 与对象,键的顺序无关紧要并且没有意义,因为对象应该是键值事件而不是基于项目的事件。如果顺序很重要,那么对象需要有一个order 属性。
      • @gurvinder372 好的,我明白了。谢谢..!!
      【解决方案3】:

      使用 Object.keys 和 for-cycle。

      var keys = Object.keys(input), output = [];
      for (var i = 0, length = keys.length; i < length; ++i)
          ouptput.push(input[keys[i]]);
      console.log(output);
      

      一些提示:
      - 在这种情况下,Cycles 比 map 函数提供移动性能,因为在今天的 JS 引擎中:更少的函数调用,更高的性能。
      - for-each (for (var k in input) {}) 比 Object.keys 和循环 for/while 慢。

      这对于今天的 Google V8 和 Mozilla SpiderMonkey 实施是可以接受的。

      【讨论】:

      • 有任何保证订单保持不变..??
      猜你喜欢
      • 2019-09-03
      • 2020-01-20
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多