对数组进行排序,以便空值始终位于最后
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对数组进行排序,以便空值始终位于最后相关的知识,希望对你有一定的参考价值。
我需要对一个字符串数组进行排序,但我需要它以使null始终是最后一个。例如,数组:
var arr = [a, b, null, d, null]
当升序排序时,我需要像[a, b, d, null, null]
一样排序,当按降序排序时,我需要像[d, b, a, null, null]
那样排序。
这可能吗?我尝试了下面找到的解决方案,但这不是我需要的。
How can one compare string and numeric values (respecting negative values, with null always last)?
答案
查看.sort()
并使用自定义排序。例
function alphabetically(ascending)
return function (a, b)
// equal items sort equally
if (a === b)
return 0;
// nulls sort after anything else
else if (a === null)
return 1;
else if (b === null)
return -1;
// otherwise, if we're ascending, lowest sorts first
else if (ascending)
return a < b ? -1 : 1;
// if descending, highest sorts first
else
return a < b ? 1 : -1;
;
var arr = [null, 'a', 'b', null, 'd'];
console.log(arr.sort(alphabetically(true)));
console.log(arr.sort(alphabetically(false)));
另一答案
使用自定义比较函数来区分null
值:
arr.sort(function(a, b)
return (a===null)-(b===null) || +(a>b)||-(a<b);
);
对于降序,只需在直接比较中交换a
和b
:
arr.sort(function(a, b)
return (a===null)-(b===null) || -(a>b)||+(a<b);
);
另一答案
最简单的方法是首先处理null
,然后根据所需的顺序处理非null情况:
function sortnull(arr, ascending)
// default to ascending
if (typeof(ascending) === "undefined")
ascending = true;
var multi = ascending ? 1 : -1;
var sorter = function(a, b)
if (a === b) // identical? return 0
return 0;
else if (a === null) // a is null? last
return 1;
else if (b === null) // b is null? last
return -1;
else // compare, negate if descending
return a.localeCompare(b) * multi;
return arr.sort(sorter);
var arr = ["a", "b", null, "d", null]
console.log(sortnull(arr)); // ascending ["a", "b", "d", null, null]
console.log(sortnull(arr, true)); // ascending ["a", "b", "d", null, null]
console.log(sortnull(arr, false)); // descending ["d", "b", "a", null, null]
另一答案
像这样,请注意:这只会将null推到后面
var arr = ["a", null, "b"];
var arrSor = [];
arr.forEach(function (el)
if (el === null)
arrSor.push(el);
else
arrSor.unshift(el);
);
另一答案
这样做:
var arr = [a, b, null, d, null]
foreach ($arr as $key => $value)
if($value == null)
unset($arr[$key]);
$arr[] = $value;
// rebuild array index
$arr = array_values($arr);
echo '<pre>';print_r($arr);die;
以上是关于对数组进行排序,以便空值始终位于最后的主要内容,如果未能解决你的问题,请参考以下文章