按照ID数组对对象数组进行排序

12

通过 ID 数组对对象数组进行排序是很容易的。以下是一个示例:

[{
    id: "A",
    name: "John"
}, {
    id: "B",
    name: "Bobby"
}, {
    id: "C",
    name: "Peter"
}]

现在我有一个对象数组,每个对象都有一个独特的ID。然后我有一个ID数组,就像这样:

var ids = ["C", "A", "B"];

能否对对象数组进行排序,使其最终呈现如下:

[{
    id: "C",
    name: "Peter"
}, {
    id: "A",
    name: "John"
}, {
    id: "B",
    name: "Bobby"
}]

1个回答

18
你可以使用一个对象来指定排序顺序。
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果你在ids数组中只有相同数量的id,那么你可以根据分配的索引重新排列数组,而无需进行排序。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }


第二种解决方案需要 n^2,因此可能会不高效。 - bmpasini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接