您的代码中的语句n < 0 ? n + 1 : null;无效。它评估为n + 1或null取决于条件n < 0。然而,结果值随后被简单地丢弃。
您要么需要return将值作为调用的一部分,map要么将其作为循环的一部分push放到数组中。下面给出了这两种方法的示例:newArreach
使用 jQuery (从数组中删除的$.map元素):n < 0
var oldArr = [0, 1, 2];
var newArr = $.map(oldArr, function(n) {
return n < 0 ? n + 1 : null;
});
使用(从数组中删除的each元素):n < 0
var oldArr = [0, 1, 2];
var newArr = [];
$.each(oldArr, function(n) {
if (n < 0) {
newArr.push(n + 1);
}
});
如果您希望保留元素n < 0并将其设置为null您将使用以下方法:
使用(设置为 的Array.prototype.map元素):n < 0null
var oldArr = [0, 1, 2];
var newArr = oldArr.map(function(n) {
return n < 0 ? n + 1 : null;
});
使用(设置为 的each元素):n < 0null
var oldArr = [0, 1, 2];
var newArr = [];
$.each(oldArr, function(n) {
newArr.push(n < 0 ? n + 1 : null);
});
您的原始代码试图混合使用这两种方法。总之:
map表示“返回一个集合,其中每个元素都是将提供的函数应用于输入集合中的相应元素的返回值”:
each是对给定集合的简单迭代,依次在每个元素上执行提供的函数。
正如@bfavaretto 之前指出的那样,jQuery$.map将删除函数返回的元素,或者null将保留它们。这导致了上述主要的行为差异。undefinedArray.prototype.map
参考: