如何从对象数组中删除键值对

4

我有如下的数组对象,如何将其转换为对象数组并移除键。

{
  "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
}]
3个回答

5

使用简单循环:

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

与另一个答案类似,不能保证数组元素的顺序与对象中的顺序相同。

1

只需尝试这个

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
@Alnitak 是的,如果这个数组是动态生成的,那就是真的。 - gurvinder372
@gurvinder372 那么有什么替代方案吗?vire.? - Satwinder Singh
@SunnyDhiman 对于对象来说,键的顺序并不重要,因为对象应该是基于键值对而不是基于项的。如果顺序很重要,那么对象需要有一个“order”属性。 - gurvinder372
@gurvinder372 好的,我明白了。谢谢..!! - Satwinder Singh

0
使用 Object.keys 和 for 循环。
var keys = Object.keys(input), output = [];
for (var i = 0, length = keys.length; i < length; ++i)
    ouptput.push(input[keys[i]]);
console.log(output);

一些提示:
- 在此情况下,循环比 map 函数更高效,因为在今天的 JS 引擎中:函数调用越少,性能越好。
- 对于每个 (for (var k in input) {}) 比 Object.keys 和 for/while 循环慢。
这对于今天的 Google V8 和 Mozilla SpiderMonkey 实现是可以接受的。

有任何保证能够保持订单不变吗? - Satwinder Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接