如何在javascript中按顺序添加key:value对

时间:2017-09-19 04:43:25

标签: javascript ember.js handlebars.js

我需要将key:value添加到对象中。

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

但现在变量'a'包含

  

{八:[a,一堆,一些东西],首先:[另一个,一堆,一些东西],两个:[更多,东西]}

虽然我想要的是

  

{第一个:[另一个,一堆,一些东西],八个:[a,一堆,一些东西],两个:[更多,东西]}

我猜这个顺序是基于键的字母顺序。这是一个问题,因为我想使用{#each model as |key value|}以与我想要的顺序相同的顺序将数据显示为hbs。

2 个答案:

答案 0 :(得分:1)

在大多数语言列表中都有对象和集合没有的顺序。对象是关键值,没有顺序。

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' ] })

然后你可以循环访问每个对象的键和值。

答案 1 :(得分:0)

示例您有一个对象,它已经有2个密钥对,a1& B2。然后你想添加k3,你可以使用这个方法:

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)