2017-09-19 24 views
0

我需要將key:value添加到對象中。如何在javascript中按順序添加鍵值對:

var a = {} 
a['first'] = [a,bunch,of,stuff] 
a['eight'] = [another,bunch,of,stuff] 
a['two'] = [more,stuff] 

但現在變量 'a' 包含

{8:[α,束,的,東西],第一:[另一個,束,的,東西],二:[更多,東西]}

而我想要的是

{第一:另一個,一堆的,東東],八:一,一堆的,東東]二:[更多,東西]}

我猜的順序是基於按鍵的字母順序。這是一個問題,因爲我想按照我想要的順序使用{#each model as |key value|}將數據顯示到hbs中。

+0

通過鍵[排序JavaScript對象的可能的複製,那麼你想添加K3,您可以使用此方法](https://stackoverflow.com/questions/5467129/sort-javascript-object-by-key) –

+0

看看這個以及 - https://stackoverflow.com/questions/1069666/sorting-javascript-object - 按產權值 –

+0

不是。我不希望它排序。我希望它以我喜歡的任意順序存在。 –

回答

1

在大多數語言中,列表具有對象和集合不具有的順序。對象是關鍵值,沒有順序。

in js arrays是類似列表的對象,其原型具有執行遍歷和變異操作的方法。 JavaScript數組的長度及其元素的類型都不固定。由於數組的長度可以隨時更改,並且數據可以存儲在數組中的非連續位置,所以JavaScript數組不會保證密集;這取決於程序員如何選擇使用它們。一般而言,這些都是方便的特點;但是,如果這些功能都是不可取的爲您的特定用途,可以考慮使用類型數組

這基本上意味着你可以在陣列任何地方的數據,這將是爲了在陣列中

var idx = []; 
idx[0] = 'hello'; 
idx[999] = 'world'; 

所以我相信你正在尋找的是

var listOfThings = []; 
listOfThings.push({ 'first': [ 'things' ] }) 
listOfThings.push({ 'eight': [ 'stuff' ] }) 
listOfThings.push({ 'two': [ 'more'. 'things' ] }) 

然後你可以循環訪問每個對象的鍵和值。

0

例如,您有一個對象,它已經有2個密鑰對,a1 & b2。如果您想將鑰匙按字母順序排序,使用此方法

let objData = [{"a1":10,"b2":20},{"b2":11,"a1":23}] 
Object.keys(objData).map(
function (object) { 
    // add k3 
    objData[object]["k3"] = "foo" 
}) 

然後:

function orderKeyAlfAsc(obj) { 
    let data = [] 
    for (var i in obj) 
     data.push(Object.keys(obj[i]).sort().reduce((r, k) => (r[k] = obj[i][k], r), {})) 
    return data 
} 

let orderedData = orderKeyAlfAsc(objData) 
相關問題