如何根据分数对对象数组进行排序 - Javascript
How to sort an array of objects based on scores - Javascript
我有一个对象数组,其中包含我要排序的数据(它有更多属性),如下所示:
[
{
"data": {
"id": "green"
}
},
{
"data": {
"id": "red"
}
},
{
"data": {
"id": "blue"
}
}
]
id
是一个嵌套的 属性 我需要使用它来根据不同对象提供的分数进行排序,如下所示:
{
"green": 5,
"red": 3,
"blue": 8
}
我正在尝试找到对我的对象数组进行排序的最佳方法,但到目前为止没有成功。
Javascripts built-in 排序函数有一个可选的比较函数参数。
下面的代码利用这个函数来解决你的问题:
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);
您可以这样排序:
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)
给出的两个答案应该没问题。不过,我还想补充一点,您可以使用枚举。例子
这是枚举用法的单独示例,并将其排序在对象数组中
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);
我有一个对象数组,其中包含我要排序的数据(它有更多属性),如下所示:
[
{
"data": {
"id": "green"
}
},
{
"data": {
"id": "red"
}
},
{
"data": {
"id": "blue"
}
}
]
id
是一个嵌套的 属性 我需要使用它来根据不同对象提供的分数进行排序,如下所示:
{
"green": 5,
"red": 3,
"blue": 8
}
我正在尝试找到对我的对象数组进行排序的最佳方法,但到目前为止没有成功。
Javascripts built-in 排序函数有一个可选的比较函数参数。 下面的代码利用这个函数来解决你的问题:
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);
您可以这样排序: 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)
给出的两个答案应该没问题。不过,我还想补充一点,您可以使用枚举。例子
这是枚举用法的单独示例,并将其排序在对象数组中
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);