在 JavaScript 中将具体元素推至最后
假设我们有一个这样的对象数组——
const arr = [ {flag: true, other: 1}, {flag: true, other: 2}, {flag: false, other: 3}, {flag: true, other: 4}, {flag: true, other: 5}, {flag: true, other: 6}, {flag: false, other: 7} ];
我们需要编写一个 JavaScript 函数,它接受这样数组,并根据以下条件对其进行排序——
如果 arr.flag === false,则匹配元素将被置于数组中靠前位置,但只能在之前的匹配元素之后。
不匹配的元素保持原有的顺序。
出现顺序很重要。
因此,对于上面的数组,输出应为——
const output = [ {flag: false, other: 3}, {flag: false, other: 7}, {flag: true, other: 1}, {flag: true, other: 2}, {flag: true, other: 4}, {flag: true, other: 5}, {flag: true, other: 6} ];
所以,我们为这个函数编写代码——
示例
相应的代码如下——
const arr = [ {flag: true, other: 1}, {flag: true, other: 2}, {flag: false, other: 3}, {flag: true, other: 4}, {flag: true, other: 5}, {flag: true, other: 6}, {flag: false, other: 7} ]; const sortByFlag = arr => { const sorter = (a, b) => { if(!a['flag'] && b['flag']){ return -1; }; if(a['flag'] && !b['flag']){ return 1; } return a['other'] - b['other']; } arr.sort(sorter); }; sortByFlag(arr); console.log(arr);
输出
控制台中输出将为——
[ { flag: false, other: 3 }, { flag: false, other: 7 }, { flag: true, other: 1 }, { flag: true, other: 2 }, { flag: true, other: 4 }, { flag: true, other: 5 }, { flag: true, other: 6 } ]
广告