我不明白为什么排序函数不对包含未定义的数组进行排序。
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];
}
或者您希望使用 undefined 和 null 进行排序的任何值——无穷大?
关于javascript - 给定未定义时,JS 排序不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273214/