2017-06-03 279 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上做任何工作?)。 –