我正在尝试自定义JavaScript对象的排序,但却无法以正确的方式获取我们如何做到这一点。假设我有一个像
这样的对象var test = {
'yellow': [],
'green': [],
'red': [],
'blue': []
}
我有一个数值为var arr = ['red', 'green', 'blue', 'yellow'];
因此在排序之后,我想按照数组中指定的顺序输出,如
var test = {
'red': [],
'green': [],
'blue': [],
'yellow': []
}
但由于某种原因,我无法做到这一点。我在这里尝试做的是循环和排序,但它在AZ模式中排序,而不是按照我指定数组的顺序排序。另外,你可能会问,我甚至没有在sort函数中使用我的数组但是没有得到一个确切的方法来实现这一点。
var test = {
'yellow': [],
'green': [],
'red': [],
'blue': []
}
var keys = Object.keys(test);
console.log(keys.sort()); //["blue", "green", "red", "yellow"] which is not ordered nor it's an object
任何指示都会有所帮助。
注意:我有这个特定的要求,因为我使用带有默认{{#each}}
块的HandleBars,但我想按顺序循环内部对象。我可以在Handlebars中循环对象并将它们传递给模板,但是我没有使用模板引擎的强大功能。我想让Handlebars循环它们还是我错过了什么?如果我循环对象并将整个标记传递给把手模板,那没关系。
答案 0 :(得分:3)
JavaScript对象是哈希值,因此本质上是无序的。您不能以任何给定顺序创建具有属性的对象。如果您在枚举密钥时收到订单,那么JavaScript引擎的实现细节纯属巧合,或者说更好。
你必须使用一系列对象来实现你想做的事情。
换句话说,使用您选择的数据结构是不可能的。
答案 1 :(得分:2)
您可以使用Map()
Map对象按插入顺序迭代其元素
var arr = ['red', 'green', 'blue', 'yellow'];
var map = new Map();
arr.forEach(function(val, index) {
var obj = {};
obj[val] = [];
map.set(index, obj)
});
console.log(map)

答案 2 :(得分:0)
也许您可以使用JSON.stringify()进行更改
喜欢
var json = { "name": "David", "age" : 78, "NoOfVisits" : 4 };
console.log(json);
//outputs - Object {name: "David", age: 78, NoOfVisits: 4}
//change order to NoOfVisits,age,name
var k = JSON.parse(JSON.stringify( json, ["NoOfVisits","age","name"] , 4));
console.log(k);
//outputs - Object {NoOfVisits: 4, age: 78, name: "David"}
将所需的键顺序放入数组中并提供给函数。然后将结果解析回json。