我有N个对象的数组,每个对象都有以下字段:
{
id: 'an id',
description: 'a description',
isUser: true/false
}
我需要基于两件事来订购该数组:
首先,如果描述中包括“狗”,“猫”或“动物”,则其在数组中的位置应早些。
其次,如果值
isUser
是false
,则它在数组中的位置也应早些。我注意到,当您想按不同属性的值确定优先级时,
sort
函数无济于事,所以我想知道在Javascript(或Lodash,我也在使用的方法)中做到这一点的最佳方法是什么? >) 最佳答案
您可以检查所需的顶部字符串是否在描述中,并将这些项目以及false
的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);
.as-console-wrapper { max-height: 100% !important; top: 0; }