【发布时间】:2023-04-01 07:59:01
【问题描述】:
我正在尝试对 JavaScript 对象进行自定义排序,但无法了解如何以正确的方式执行此操作。假设我有一个类似的对象
var test = {
'yellow': [],
'green': [],
'red': [],
'blue': []
}
我有一个数组,其值为:var arr = ['red', 'green', 'blue', 'yellow'];
所以排序后,我想按照数组中指定的顺序输出
var test = {
'red': [],
'green': [],
'blue': [],
'yellow': []
}
但由于某种原因,我无法做到这一点。这里要做的是循环和排序,但它以 AZ 模式排序,而不是按照我指定数组的顺序。另外,你可能会问,我什至没有在排序函数中使用我的数组,但没有得到实现这一目标的确切方法。
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 循环它们还是我错过了什么?如果我循环对象并将整个标记传递给车把模板是否可以。
【问题讨论】:
-
对象在 JavaScript 中没有顺序。 “对对象进行排序”是没有意义的。
-
对象一进入JavaScript,就没有顺序了。为了证明这一点,请在 Chrome 中尝试以下操作:
console.dir({b:1,a:2})- 您将得到{a:2,b:1}作为输出,因为 Chrome 按字母顺序显示带有键的对象以便于调试。它可以做到这一点,因为对象缺乏内在的顺序。 -
@FelixKling 您标记的问题不一样,即正常排序,我要求的是自定义排序。在问这个问题之前我确实搜索过。请在关闭之前阅读问题。
-
这是一个人试图解决问题 A,决定采取行动 B,陷入困境,然后试图寻求 B 的帮助,而不是寻求 A 的帮助。 @Learner,您应该为您的问题 A 寻求帮助,这似乎类似于“如何在 Handlebars 模板中显示我的 JS 对象内容,已排序”。
-
@guest271314:当然,但前提是事先知道订单(这里就是这种情况)。但这也只有在接收数据的函数知道如何处理
Maps 时才有效。再说一次,如果是您的代码遍历Map,您不妨遍历键数组并简单地按该顺序访问对象属性。
标签: javascript sorting handlebars.js javascript-objects