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