如何解决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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。