在 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 }
]

更新于:2020-10-24

91 次浏览

开启你的 职业

完成课程,获得认证

立即开始
广告