Javascript 根据两个属性的值对数组中的对象排序

Javascript 根据两个属性的值对数组中的对象排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个由N个对象组成的数组,每个对象都有以下字段: { id: 'an id', description: 'a description', isUser: true/false } 我需要根据两件事订购该阵列: 首先,如果描述包含“dog”、“cat”或“animal”,那么它在数组中的位置应该更早。 其次,如果值isUser为false,则它在数组中的位置也应该更早 我注意到,sort函数在您希望按不同属性的值进行优先级排序时没有帮助,因此我想知道在Javascript(或L

我有一个由N个对象组成的数组,每个对象都有以下字段:

{
  id: 'an id',
  description: 'a description',
  isUser: true/false
}
我需要根据两件事订购该阵列:

首先,如果描述包含“dog”、“cat”或“animal”,那么它在数组中的位置应该更早。 其次,如果值
isUser
false
,则它在数组中的位置也应该更早


我注意到,
sort
函数在您希望按不同属性的值进行优先级排序时没有帮助,因此我想知道在Javascript(或Lodash,我也在使用:)中实现这一点的最佳方法是什么。

您可以将compareFunction传递给数组的sort方法,因此,
sort
函数应该会有所帮助。例如:

yourArray.sort( function(a, b) {
    if ( !a.isUser || a.description == 'animal')  return -1;
    return 1;
});

您可以检查想要的顶部字符串是否在描述中,并将这些项目移动到顶部,以及
isUser
false

var数组=[{id:1,描述:'cat',isUser:false},{id:5,描述:'dog',isUser:true},{id:6,描述:'flower',isUser:true},{id:7,描述:'cat',isUser:true},{id:2,描述:'animal',isUser:false},{id:3,描述:'tree',isUser:false},{id:4,描述:'dog',isUser:false}];
array.sort(函数(a,b){
var top=['dog'、'cat'、'animal'];
返回top.includes(b.description)-top.includes(a.description)| | a.isUser-b.isUser;
});
console.log(数组)
.as控制台包装{最大高度:100%!重要;顶部:0;}
var测试=[{
id:“一个id”,
描述:'描述狗',
isUser:false
},{
id:'一个id 2',
描述:'描述动物',
isUser:对
},{
id:'一个id 3',
描述:“描述”,
isUser:对
},{
id:'一个id 4',
描述:“描述”,
isUser:false
}]
函数排序(arr){
返回arr.sort(a=>!(a.description.includes('dog')| | a.description.includes('cat')| | a.description.includes('animal')| |!a.isUser))
}

log(sort(test))
假设您的问题是根据给定的属性和条件重新排列现有数组

// grouping on basis of "description" 

const animalGrp = _.groupBy(array, (t) => _.includes(t.description, 'dog') || _.includes(t.description, 'cat') || _.includes(t.description, 'animal') );

// grouping on basis of "isUser" 
const userGrp = _.groupBy(animalGrp.false, 'isUser');

// final output
const result = [...animalGrp.true, ...userGrp.true, ...userGrp.false]

请添加一些数据用于排序和所需的订单。您所说的“更快的位置”是什么意思?你想让属性为
isUser:false
description:'dog'/'cat'或'animal'
的对象出现在其他元素之前吗?尼娜有一个问题,为什么在includes的情况下你把B description放在第一位,而在做
isUser
的时候你把A放在第一位?那么,为什么不:
返回top.includes(b.description)-top.includes(a.description)| b.isUser-a.isUser