javascript - 给定未定义时,JS 排序不排序

标签 javascript sorting

我不明白为什么排序函数不对包含未定义的数组进行排序。

var sortBy = function(collection, iterator) {
    var newArr = map(collection, function(item, key, collection) {

        if (item === undefined, null) {
            return [undefined, undefined];

        } else {
            if (typeof(iterator) === 'string') {
                return [item, item[iterator]];

            } else {
                var results = iterator(item);
                return [item, results];
            }
        }
    });

    newArr.sort(function(a, b) { 
        return a[1] - b[1];
    });

    return map(newArr, function(item, key, collection) {
        return  item[0];
    });
};

var list = [4, 1, undefined, 3, 2];
sortBy(list, function(i) { return i; });

如果我删除未定义的,数组排序就好了。有了它,它根本不排序。 感谢您的帮助! (PS 我是编码新手,所以欢迎任何其他提示/建议)

最佳答案

假设 map 函数类似于:

function map(obj, fn) {
  var re = /^\d+$/;
  var arr = [];

  for (var p in obj) {
    if (re.test(p) && obj.hasOwnProperty(p)) {
      arr.push(fn(obj[p], p, obj)); 
    }
  }
  return arr;
}

然后在排序函数中,语句:

return a[1] - b[1];

会做这样的事情:

4 - undefined => NaN

所以迭代器中的错误行可能是:

    if (item === undefined || item === null) {
        return [undefined, 0];
    }

或者您希望使用 undefinednull 进行排序的任何值——无穷大

关于javascript - 给定未定义时,JS 排序不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273214/

相关文章:

javascript - 正则表达式 [任意数字]

python - 如何使用 Pandas 对数据帧索引进行重新排序/排序?

javascript - 使用 Express、Node.JS 和 Require 模块进行外部 API 调用

javascript - 如何自动重新加载网页

javascript - 无法在我的客户表单中选择一个值并将其标记为在 Silvio Moreto 的 selectpicker 中选择

javascript - 使用 @html.ActionLink 激活类

Ruby:根据条件拆分/排序数组

javascript - 使用backbone.js 排序和渲染数据时遇到一些问题

linux - 在日志行中按 ID 对输出进行排序

python - 如何检查两个元组列表是否相同