Mor*_*der 4 javascript arrays sorting ecmascript-5
是否可以很容易地通过ID数组对对象数组进行排序?这是一个例子:
[{
id: "A",
name: "John"
}, {
id: "B",
name: "Bobby"
}, {
id: "C",
name: "Peter"
}]
Run Code Online (Sandbox Code Playgroud)
现在,我有了一个对象数组,每个对象都有一个唯一的ID。然后,我有一个ID数组,如下所示:
var ids = ["C", "A", "B"];
Run Code Online (Sandbox Code Playgroud)
是否可以对对象数组进行排序,所以最终结果如下:
[{
id: "C",
name: "Peter"
}, {
id: "A",
name: "John"
}, {
id: "B",
name: "Bobby"
}]
Run Code Online (Sandbox Code Playgroud)
您可以使用对象进行排序。
var data = [{ id: "A", name: "John" }, { id: "B", name: "Bobby" }, { id: "C", name: "Peter" }],
ids = ["C", "A", "B"],
order = {};
ids.forEach(function (a, i) { order[a] = i; });
data.sort(function (a, b) {
return order[a.id] - order[b.id];
});
console.log(data);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
如果数组中只有相同数量id
的ids
数组,则可以使用分配的索引重新排列数组而无需排序。
var data = [{ id: "A", name: "John" }, { id: "B", name: "Bobby" }, { id: "C", name: "Peter" }],
ids = ["C", "A", "B"],
result = [];
data.forEach(function (a) {
result[ids.indexOf(a.id)] = a;
});
console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)