Javascript通过与特定条件进行比较来对对象数组进行排序



我有一个像这样的对象数组:

obj = [{'name': 'Tom', 'age': 17, 'gender': 'male', 'color':'red', 'position':3},
{'name': 'Sam', 'age': 19, 'gender': 'male', 'color':'red', 'position':2},
{'name': 'Harry', 'age': 16, 'gender': 'male', 'color':'red', 'position':1},
{'name': 'Charles', 'age': 19, 'gender': 'male', 'color':'blue', 'position':2},
{'name': 'Fred', 'age': 21, 'gender': 'male', 'color':'blue', 'position':3},
{'name': 'Mike', 'age': 23, 'gender': 'male', 'color':'blue', 'position':1}]

我希望实现的是,对所有颜色相似的对象按位置升序排列对象阵列。我的预期输出是:

obj = [{'name': 'Harry', 'age': 16, 'gender': 'male', 'color':'red', 'position':1},
{'name': 'Sam', 'age': 19, 'gender': 'male', 'color':'red', 'position':2},
{'name': 'Tom', 'age': 17, 'gender': 'male', 'color':'red', 'position':3},
{'name': 'Mike', 'age': 23, 'gender': 'male', 'color':'blue', 'position':1}
{'name': 'Charles', 'age': 19, 'gender': 'male', 'color':'blue', 'position':2},
{'name': 'Fred', 'age': 21, 'gender': 'male', 'color':'blue', 'position':3}]

我的方法:我有这样一套独特的颜色:

unique_colors = ['red', 'blue'];
for (var i in unique_colors){
obj.forEach(function(x){
if (i === x.colors){
obj.sort((a,b) => a.position - b.position);
}
}
});

但这并没有奏效。请在我出错的地方帮我。提前非常感谢。抱歉,如果它微不足道,我还在学习javascript。

您可以使用indexOf函数来获取颜色的索引并比较

let objArr = [{'name': 'Tom', 'age': 17, 'gender': 'male', 'color':'red', 'position':3},
{'name': 'Sam', 'age': 19, 'gender': 'male', 'color':'red', 'position':2},
{'name': 'Harry', 'age': 16, 'gender': 'male', 'color':'red', 'position':1},
{'name': 'Charles', 'age': 19, 'gender': 'male', 'color':'blue', 'position':2},
{'name': 'Fred', 'age': 21, 'gender': 'male', 'color':'blue', 'position':3},
{'name': 'Mike', 'age': 23, 'gender': 'male', 'color':'blue', 'position':1}];

let colors = ['red','blue']
objArr.sort((a,b) => {
let idxA = colors.indexOf(a.color);
let idxB = colors.indexOf(b.color) ;
return idxA === idxB ? a.position-b.position : idxA - idxB 
});
console.log(objArr);

您需要以下自定义排序算法:

const obj = [{
name: "Tom",
age: 17,
gender: "male",
color: "red",
position: 3
},
{
name: "Sam",
age: 19,
gender: "male",
color: "red",
position: 2
},
{
name: "Harry",
age: 16,
gender: "male",
color: "red",
position: 1
},
{
name: "Charles",
age: 19,
gender: "male",
color: "blue",
position: 2
},
{
name: "Fred",
age: 21,
gender: "male",
color: "blue",
position: 3
},
{
name: "Mike",
age: 23,
gender: "male",
color: "blue",
position: 1
},
];
const result = obj.sort((a, b) => {
if (a.color === b.color) {
return a.position - b.position;
} else return a.color - b.color;
});
console.log(result);
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}

最新更新