Lodash:按布尔值排序对象数组?

Run*_*ick 7 javascript lodash

我有一个我想订购的对象数组(本质上它是一个表格):

myArr = [{
    name: 'John',
    email: 'john@gmail.com',
    accepted: true
}, {
    name: 'Alfred',
    email: 'alfred@gmail.com',
    accepted: false
}]
Run Code Online (Sandbox Code Playgroud)

我正在使用 lodash 中的 orderBy,如下所示:

//get columnName to sort by from another function
const newArr = _.orderBy(myArr, [columnName], ['asc'])
Run Code Online (Sandbox Code Playgroud)

按姓名和电子邮件订购可以正常工作,因为接受它并没有做任何事情。我知道我可以将接受存储为 0 和 1,但是还有其他方法吗?lodash 是否足够,或者我应该为此创建一个单独的函数?

Mur*_*dji 6

你可以用ES6表示法尝试一下

const newArr = [
    ...myArr.filter(c => c.accepted === false),
    ...myArr.filter(c => c.accepted === true)
];
Run Code Online (Sandbox Code Playgroud)

您还可以使用Array.sort 原型

myArr.sort((a, b) => (a.accepted - b.accepted));
Run Code Online (Sandbox Code Playgroud)

  • 在 ES6 表示法中,我们通过连接 2 个数组来创建一个新数组。第一个数组具有按 Accepted === false 过滤的项目,另一个数组具有按 Accepted === true 过滤的项目。这会将接受的项目插入到新创建的数组的最后一个中。 (2认同)