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

时间:2019-07-04 05:39:27

标签: javascript arrays node.js sorting

我有一个对象数组。在某些对象键中,存在{喜欢:true}键。我希望将它们排序为所有具有喜欢的值的对象位于数组顶部,并保留在它们之后。有些对象的键为{喜欢: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
    })

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

2 个答案:

答案 0 :(得分:3)

如果提供了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作为其两个参数时,
  5. compareFunction(a,b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序不确定。
 arr.sort(function(a, b){
      return b.liked? 1 :-1;
    })

答案 1 :(得分:0)

您的示例已在节点v10.16.0中工作

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

console.dir(arr)

这将产生输出:

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

请参阅CodeSandbox:https://codesandbox.io/s/confident-platform-bq7u0

编辑:话虽如此,最好确保您的比较函数给出适当的输出范围(-1、0、1)。