基于两个属性的值对数组中的对象进行排序

时间:2018-03-14 13:35:03

标签: javascript arrays sorting

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

{
  id: 'an id',
  description: 'a description',
  isUser: true/false
}

我需要根据两件事来订购该数组:

首先,如果描述包括“狗”,“猫”等。或者'动物'它应该在阵列中有更快的位置。 其次,如果值isUserfalse,则它应该在数组中具有更快的位置。

我注意到sort函数在您想要按不同属性的值划分优先级时没有帮助,所以我想知道在Javascript(或Lodash,这是最好的方法)我也在使用:https://lodash.com/

4 个答案:

答案 0 :(得分:1)

您可以检查所需的顶部字符串是否在说明中,并将这些项目移至顶部,以及false的{​​{1}}值。

isUser
var array = [{ id: 1, description: 'cat', isUser: false }, { id: 5, description: 'dog', isUser: true }, { id: 6, description: 'flower', isUser: true }, { id: 7, description: 'cat', isUser: true }, { id: 2, description: 'animal', isUser: false }, { id: 3, description: 'tree', isUser: false }, { id: 4, description: 'dog', isUser: false }];
		
array.sort(function (a, b) {
    var top = ['dog', 'cat', 'animal'];
    return top.includes(b.description) - top.includes(a.description) || a.isUser - b.isUser;
});

console.log(array);

答案 1 :(得分:1)

var test = [{
  id: 'an id',
  description: 'a description dog',
  isUser: false
},{
  id: 'an id 2',
  description: 'a description animal',
  isUser: true
},{
  id: 'an id 3',
  description: 'a description',
  isUser: true
},{
  id: 'an id 4',
  description: 'a description',
  isUser: false
}]

function sort(arr){
  return arr.sort(a=> !(a.description.includes('dog')||a.description.includes('cat')||a.description.includes('animal') || !a.isUser))
}

console.log(sort(test))

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

假设您提出的问题是根据给定的属性和条件重新排列现有数组。

// 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]