这很简单,但是没有用。我做错了什么?
var oldArr = [0, 1, 2];
var newArr = [];
/*
* The function adds 1 to each array el's value, unless the value is 0,
* if so it deletes from array
*/
$.map(oldArr, function(n){
n < 0 ? n + 1 : null;
newArr.push(n);
});
alert(newArr) //show original values;
为每个人欢呼,谢谢
答案 0 :(得分:3)
代码中的语句n < 0 ? n + 1 : null;
无效。它根据条件n + 1
评估为null
或n < 0
。但是,然后简单地丢弃结果值。
作为对return
的调用的一部分,您需要map
将push
作为newArr
循环的一部分each
放到数组$.map
上。这两种方法的例子如下:
使用jQuery 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
表示“返回一个集合,其中每个元素都是将提供的函数应用于输入集合中相应元素的返回值”:$.map
是对给定集合的简单迭代,依次对每个元素执行提供的函数。正如@bfavaretto先前指出的那样,jQuery的null
将删除函数返回undefined
或Array.prototype.map
的元素,而{{1}}将保留它们。这导致了上述主要的行为差异。
参考文献:
答案 1 :(得分:1)
当您map
时,您不是push
,而是return
。此外,如果您返回null
(或undefined
) 1 ,jQuery似乎不会推送新值。您可以改为使用Array.prototype.map
:
var newArr = oldArr.map(function(n){
return n < 0 ? n + 1 : null;
});
请注意,这将生成一个包含3 null
s的数组,其中包含您当前的输入。这真的是你在找什么?
1 documentation实际上表示如果您要从结果中删除项目,则应返回null
或undefined
答案 2 :(得分:0)
我认为$.map
不是你在这里寻找的。 each()
可能会更好:
var oldArr = [0, 1, 2];
var newArr = [];
$.each(oldArr, function(idx, obj){
if (obj > 0)
newArr.push(obj + 1);
})
alert(newArr);
答案 3 :(得分:0)
以下是您目前所遇到的问题:
n
中设置$.map
,这就是数组相同的原因。以下是我将如何做到这一点(假设你想要更大而不是0)
var newArr = $.map(oldArr, function(n) { return n ? n + 1 : null });