根据数组对象中存在的键排序

Dee*_*pta 3 javascript arrays sorting node.js

我有一个对象数组。在某些对象中,存在键 {like:true}。我希望将它们排序为所有喜欢数组顶部的值并保留在它们之后的对象。有一些对象具有键 {like:true}。我希望对整个数组对象进行排序,因为那些具有键 {liked : true} 的对象位于数组的顶部,而那些没有键 {liked :true} 的对象将在之后出现。

var arr = [ { e:1, f: 2}, {liked:true, a:1, b: 2},{ g:1, h: 2},{liked:true, c:1, d: 2}]

我试过这个,但没有用。

 arr.sort(function(a, b){
      return b.liked
    })
Run Code Online (Sandbox Code Playgroud)

我希望所有具有键 {liked:true} 的对象都位于数组的顶部。

Asn*_*ari 6

如果提供了 compareFunction,则所有未定义的数组元素将根据比较函数的返回值进行排序(所有未定义的元素都排序到数组的末尾,不调用 compareFunction)。如果 a 和 b 是要比较的两个元素,则:

  1. 如果 compareFunction(a, b) 小于 0,则将 a 排序到低于 b 的索引(即 a 在前)。
  2. 如果 compareFunction(a, b) 返回 0,则使 a 和 b 彼此保持不变,但相对于所有不同元素进行排序。注意:ECMAscript 标准不保证这种行为,因此,并非所有浏览器(例如至少可以追溯到 2003 年的 Mozilla 版本)都尊重这一点。
  3. 如果 compareFunction(a, b) 大于 0,则将 b 排序到低于 a 的索引(即 b 在前)。
  4. 当给定一对特定的元素 a 和 b 作为它的两个参数时,compareFunction(a, b) 必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。
 arr.sort(function(a, b){
      return b.liked? 1 :-1;
    })
Run Code Online (Sandbox Code Playgroud)

  • 如果您想将原始订单保留为子订单(而不依赖于键的值为“truthy”):`[{ a: 1 }, { like: 1 }, { like: 2 }, { a: 2 }, { 喜欢: 3 }].sort((item1, item2) => (!('喜欢' in item1) && '喜欢' in item2 ? 1 : -1)); ` (2认同)