我有如下所示的Array对象,如何将此格式转换为对象数组并删除键。
{
"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
}]
答案 0 :(得分:3)
使用简单的循环:
array = [];
for (var key in obj) {
array.push(obj[key]);
}
与另一个答案一样,不能保证数组元素的顺序与对象的顺序相同。
答案 1 :(得分: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;
});
答案 2 :(得分:0)
使用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);
一些提示:
- 在这种情况下,循环提供了移动性能而不是map函数,因为在今天的JS引擎中:函数调用次数减少,性能更高
- For-each(for(var k in input){})比Object.keys慢,循环为/ while。
今天实施Google V8和Mozilla SpiderMonkey是可以接受的。