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

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


我需要基于两件事来订购该数组:

首先,如果描述中包括“狗”,“猫”或“动物”,则其在数组中的位置应早些。
其次,如果值isUserfalse,则它在数组中的位置也应早些。

我注意到,当您想按不同属性的值确定优先级时,sort函数无济于事,所以我想知道在Javascript(或Lodash,我也在使用的方法)中做到这一点的最佳方法是什么? >)

最佳答案

您可以检查所需的顶部字符串是否在描述中,并将这些项目以及falseisUser值移至顶部。



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; }

09-05 21:14