javascript - 如何根据分数对对象数组进行排序 - Javascript

我有一个对象数组,其中包含我要排序的数据(它有更多属性),如下所示:

[
    {
        "data": {
            "id": "green"
        }
    },
    {
        "data": {
            "id": "red"
        }
    },
    {
        "data": {
            "id": "blue"
        }
    }
]

id 是我需要使用的嵌套属性,以便根据从不同对象提供的分数进行排序,如下所示:

{
    "green": 5,
    "red": 3,
    "blue": 8
}

我正在尝试找到对我的对象数组进行排序的最佳方法,但是到目前为止还没有成功。

回答1

Javascripts 内置排序函数有一个可选的比较函数参数。以下代码利用此功能解决您的问题:

var array = [
    {
        "data": {
            "id": "green"
        }
    },
    {
        "data": {
            "id": "red"
        }
    },
    {
        "data": {
            "id": "blue"
        }
    }
];

var scores =
{
    "green": 5,
    "red": 3,
    "blue": 8
};

array.sort((a, b) => (scores[a.data.id] - scores[b.data.id]));

console.log(array);

回答2

你可以像这样对它们进行排序:https://jsfiddle.net/Ldvja31t/1/

const scores = {
    "green": 5,
    "red": 3,
    "blue": 8
};

const myData = [
    {
        "data": {
            "id": "green"
        }
    },
    {
        "data": {
            "id": "red"
        }
    },
    {
        "data": {
            "id": "blue"
        }
    }
];

myData.sort((d1, d2) => {
    return scores[d1.data.id] - scores[d2.data.id]
});

console.log(myData)

回答3

给出的两个答案应该可以正常工作。但是我还想补充一点,您可以使用枚举。例子

这是枚举用法的单独示例,sorting 将其放在对象数组中

const enum Order {
    Start = 'Start',
    Run = 'Run',
    End = 'End',
}

const predicate = (a, b) => {
    const map = {};
    map[Order.Start] = 1;
    map[Order.Run] = 2;
    map[Order.End] = 3;

    if (map[a] < map[b]) {
        return -1;
    }

    if (map[a] > map[b]) {
        return 1;
    }

    return 0;
}

const data = [Order.End, Order.Run, Order.Start];

const result = data.sort(predicate);

console.log(result);

相似文章

kotlin - 使用 Kotlin 按多个条件排序

我们想按三个不同的标准对对象进行排序,具有较高优先级的标准会覆盖下一个):状态字段时间场排序字段status是枚举并且有一个自定义的sorting,我们通过一个比较器来实现。(未知,打开,关闭,)so...