使用$ .map我试图将值放入新数组但不起作用

时间:2013-08-08 21:46:47

标签: javascript jquery

这很简单,但是没有用。我做错了什么?

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;

为每个人欢呼,谢谢

4 个答案:

答案 0 :(得分:3)

代码中的语句n < 0 ? n + 1 : null;无效。它根据条件n + 1评估为nulln < 0。但是,然后简单地丢弃结果值。

作为对return的调用的一部分,您需要mappush作为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 < 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表示“返回一个集合,其中每个元素都是将提供的函数应用于输入集合中相应元素的返回值”:
  • $.map是对给定集合的简单迭代,依次对每个元素执行提供的函数。

正如@bfavaretto先前指出的那样,jQuery的null将删除函数返回undefinedArray.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实际上表示如果您要从结果中删除项目,则应返回nullundefined

答案 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)

以下是您目前所遇到的问题:

  1. 您没有在n中设置$.map,这就是数组相同的原因。
  2. 数组中没有任何内容小于0
  3. 以下是我将如何做到这一点(假设你想要更大而不是0)

    var newArr = $.map(oldArr, function(n) { return n ? n + 1 : null });