2017-09-19 31 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) 
相关问题