【发布时间】:2015-07-03 20:15:34
【问题描述】:
假设我有这个数组:
var array = [
{ name: "border-color", value: "#CCCCCC" },
{ name: "color", value: "#FFFFFF" },
{ name: "background-color", value: "rgb(0, 0, 0)" },
{ name: "background-color", value: "rgba(0, 0, 0, .5)" }
];
这个函数按名称对数组进行排序:
array.sort(function(a, b) {
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
});
还有ECMAScript language specifications that tell me that:
排序不一定是稳定的(即比较的元素 equal 不一定保持原来的顺序)。
所以,排序后,name = background color 的两项可以按任意顺序出现,即:
[
{ name: "background-color", value: "rgb(0, 0, 0)" },
{ name: "background-color", value: "rgba(0, 0, 0, .5)" },
...
]
或者
[
{ name: "background-color", value: "rgba(0, 0, 0, .5)" },
{ name: "background-color", value: "rgb(0, 0, 0)" },
...
]
如何对数组进行排序,以使具有相同名称的项目保持其相对顺序?我宁愿不硬编码任何东西。
【问题讨论】:
-
查看这个答案以了解稳定排序的简短 ES6 实现:stackoverflow.com/a/48660568/1260020
标签: javascript arrays sorting