我有一个N个对象的数组,每个对象都有以下字段:
{
id: 'an id',
description: 'a description',
isUser: true/false
}
我需要根据两件事来订购该数组:
首先,如果描述包括“狗”,“猫”等。或者'动物'它应该在阵列中有更快的位置。
其次,如果值isUser
为false
,则它应该在数组中具有更快的位置。
我注意到sort
函数在您想要按不同属性的值划分优先级时没有帮助,所以我想知道在Javascript(或Lodash,这是最好的方法)我也在使用:https://lodash.com/)
答案 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]