繁体   English   中英

javascript对象按数组排序

[英]javascript objects sorting by array

有没有办法对结构中的对象数组进行排序,例如:

var objs = [{
    "name": "B",
    "value": 1
}, {
    "name": "D",
    "value": "45"
}, {
    "name": "E",
    "value": "234"
}, {
    "name": "A",
    "value": "543"
}, {
    "name": "C",
    "value": "250"
}, {
    "name": "B",
    "value": 6
}, {
    "name": "D",
    "value": "234"
}, {
    "name": "E",
    "value": "67"
}, {
    "name": "A",
    "value": "78"
}, {
    "name": "C",
    "value": "12"
}];

通过另一个数组中的元素:

var orderedArray = ["E", "C", "B", "A", "D"];

为了获得如下结构:

    {
            "name": "E",
            "value": "234"
        },
    {
            "name": "C",
            "value": "250"
        },
    {
            "name": "B",
            "value": 1
        },
{
        "name": "A",
        "value": "543"
    },
{
        "name": "D",
        "value": "45"
    },
{
        "name": "E",
        "value": "67"
    },
{
        "name": "C",
        "value": "12"
    },
{
        "name": "B",
        "value": 6
    },
{
        "name": "A",
        "value": "78"
    },
{
        "name": "D",
        "value": "234"
    }

我正在尝试按名称键的索引使用 sort() 函数:

 var objs = [{ "name": "B", "value": 1 }, { "name": "D", "value": "45" }, { "name": "E", "value": "234" }, { "name": "A", "value": "543" }, { "name": "C", "value": "250" }, { "name": "B", "value": 6 }, { "name": "D", "value": "234" }, { "name": "E", "value": "67" }, { "name": "A", "value": "78" }, { "name": "C", "value": "12" }]; var orderedArray = ["E", "C", "B", "A", "D"]; var sorted = objs.sort((a, b) => orderedArray.indexOf(a.name) - orderedArray.indexOf(b.name)); console.log(sorted);

但结果的顺序不对。

示例: jsfiddle

您可以使用 map进行排序,并采用组和顺序进行排序。

 var array = [{ name: "B", value: 1 }, { name: "D", value: "45" }, { name: "E", value: "234" }, { name: "A", value: "543" }, { name: "C", value: "250" }, { name: "B", value: 6 }, { name: "D", value: "234" }, { name: "E", value: "67" }, { name: "A", value: "78" }, { name: "C", value: "12" }], order = ["E", "C", "B", "A", "D"], groups = Object.create(null), result = array .map((o, i) => ({ index: i, order: order.indexOf(o.name), group: groups[o.name] = (groups[o.name] || 0) + 1 })) .sort((a, b) => a.group - b.group || a.order - b.order) .map(({ index }) => array[index]); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM