我有一个对象数组。在某些对象键中,存在{喜欢: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}的对象都位于数组的顶部。
答案 0 :(得分:3)
如果提供了compareFunction,则根据比较函数的返回值对所有未定义的数组元素进行排序(所有未定义的元素均排序到数组的末尾,而无需调用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)。