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

问题描述

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

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

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

 obj = [{'name': 'Harry',{'name': 'Tom','position':1}
        {'name': 'Charles','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,'position':2},{'name': 'Harry','age': 16,'position':1},{'name': 'Charles','color':'blue',{'name': 'Fred','age': 21,{'name': 'Mike','age': 23,'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,position: 2
  },{
    name: "Harry",age: 16,position: 1
  },{
    name: "Charles",color: "blue",{
    name: "Fred",age: 21,{
    name: "Mike",age: 23,];

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;
}