在纯javascript中排序数组时的最佳实践,如果我必须将一组发送到后面
Best practice when sorting an array in pure javascript, if I have to send one group to the back
如果我有以下数组:
[0, 1, 3, 0, 4, 2]
我想对它进行升序排序,除了末尾需要的零:
[1, 2, 3, 4, 0, 0]
请记住,对于这个解决方案,我没有访问下划线或linq.js。我目前的解决方案可以工作,但感觉相当沉重、冗长,而且不是很优雅。下面是我的代码:
function sortNumbers(numbers) {
var zeroNumbers = [];
var notZeroNumbers = [];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === 0) {
zeroNumbers.push(numbers[i]);
} else {
notZeroNumbers.push(numbers[i]);
}
}
var sortedNumbers = notZeroNumbers.sort(function (a, b) {
return parseFloat(a) - parseFloat(b);
});
for (var x = 0; x < zeroNumbers.length; x++) {
sortedNumbers.push(zeroNumbers[x]);
}
return sortedNumbers;
}
我可以改进这个解决方案吗?
这与这个问题无关,但我正在搜索"纯排序javascript",这是第一个答案。
因为sort会改变原始数组,所以排序数组时的最佳实践是先克隆它。
const sortedArray = [...array].sort(/* optional comparison function*/)
simple try
var output = [0, 1, 3, 0, 4, 2].sort(function(a, b) {
a = a || Number.MAX_SAFE_INTEGER; //if a == 0 then it will be a falsey value and a will be assigned Number.MAX_SAFE_INTEGER
b = b || Number.MAX_SAFE_INTEGER;
return a - b;
});
console.log(output)
var arr = [0, 1, 3, 0, 4, 2, 9, 8, 7, 0];
arr.sort(function (left, right) {
return left == right ? 0 : (left === 0 ? 1 : (left < right ? -1 : 1));
});
console.log(arr)
无论数字的大小,这将始终在末尾放置0。
使用Array.sort
, Array.splice
和Array.push
函数的另一种替代方案:
var arr = [0, 1, 3, 0, 4, 2];
arr.sort();
while(arr[0] === 0) { arr.splice(0,1); arr.push(0); }
console.log(arr); // [1, 2, 3, 4, 0, 0]
您可以使用sort,它接受闭包/回调。
var sortedArray = [0, 1, 3, 0, 4, 2].sort(function(currentValue, nextValue) {
if(currentValue === 0) {
return 1;
} else {
return currentValue - nextValue;
}
});
相关文章:
- 创建一个数组数组,没有任何重复的Javascript
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 如何在Java Script中比较二维数组和一维数组,并将常见数据存储在另一个数组中
- 如何在javascript中使用2个一维数组创建层次结构树
- PHP json_encode不适用于一维数组
- 如何在一维数组中存储 3 个随机数,然后在 Javascript 中收到警报
- 在JavaScript中,从一组数组递归地构建一个字典/嵌套对象
- 有没有一种优雅的方式来连接数组数组
- 将字符串的一维数组转换为二维数组
- Javascript使用map从一维数组创建一个二维数组
- PHP 循环通过多维到一维数组
- 使用 for 循环创建一个数组数组
- 使用JavaScript将对象的多维数组转换为一维数组
- 用一维数组过滤多维数组
- 使用传递给函数的参数动态地从一组数组中检索值
- mongoose.js:我如何从引用的子数组中删除一个属性,同时使用填充和使用其中一个子数组字段作为过滤器
- 查询string是否在一组数组中
- 如何使文本轮播与一组数组
- 在一组数组中查找最小和最大时间