2017-06-03 261 views
-2

我的目标看起来像这样{{},{},{},{}}如何将对象的对象转换为对象数组?

我希望它看起来像这样:

[{},{},{},{}]

+2

你想失去在原始对象内部对象的属性名称?因为原始对象不能像你描述的那样。它必须是'{foo:{},bar:{},baz:{}}'。 –

+1

哪里是您的原始对象的关键? – jmugz3

回答

0

如果您使用的是jQuery,您可以使用$ .each()方法遍历原始对象。

否则,你可以尝试一个for循环:

var originalObject = { 
 
    "key1": { "obj1Key": "obj1Value" }, 
 
    "key2": { "obj2Key": "obj2Value" }, 
 
    "key3": { "obj3Key": "obj3Value" } 
 
} 
 

 
var newArray = []; 
 

 
for (var key in originalObject) { 
 
    newArray.push(originalObject[key]); 
 
} 
 

 
console.log("New Array: " + newArray);

1

那么,首先没有这样的东西作为对象的对象,除非你的意思是一个对象的属性是对象。例如:{ foo: { bar: 'xyz'} }

为了这样的对象转换为一个集合(对象数组)只是通过键环等这样

let objOfObjs = { 
    foo: { xyz: 'bar'}, 
    bar: { abc: 'foo'} 
}, collection = []; 

Object.keys(objOfObjs).forEach(key => collection.push(objOfObjs[key])); 

console.log(collection); //[ { xyz: 'bar' }, { abc: 'foo' } ] 

REPL:https://repl.it/I4MS

+1

'collection = Object.keys(objOfObjs).map(key => objOfObjs [key]);'? – HBP

+0

@HBP真的,我宁愿这样做,因为我不喜欢在变量声明中做这种逻辑。 – Baruch

1
var obj = { 'a' : {}, 'b': {}, 'c': {}, 'd': {} } 
var list = []; 
Object.keys(obj).forEach(function(key) { 
    list.push(obj[key]); 
}); 

或简单

var list = Object.values(obj); 
2

IF您只使用Chrome或Firefox,您可以使用Object.values()

var o = {a:{k:1}, b:{k:2}, c:{k:3}} 
var values = Object.values(o); 
// [{"k":1}, {"k":2}, {"k":3}] 

否则,使用(并接受)基于Object.keys()的答案。

+3

好的答案,但我建议OP,这将不适用于Safari,IE,Edge和Opera。 –

+0

@GerardoFurtado好主意。 – Phrogz

+0

我试图找到有关Edge的任何信息,但我找不到任何...因此,为了给出疑问的好处,现在让我们假设Object.values()不适用于: Safari浏览器,Opera和IE浏览器(在IE上做任何工作?)。 –