0

This is pretty simple,... but is not working. what am i doing wrong??

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;

cheers everyone, thanks

4

4 回答 4

3

您的代码中的语句n < 0 ? n + 1 : null;无效。它评估为n + 1null取决于条件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

参考:

于 2013-08-08T21:49:57.563 回答
1

当你map,你不push,而是return相反。null此外,如果您返回(或undefined1,jQuery 似乎不会推送新值。您可以Array.prototype.map改用:

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

请注意,这将null使用您当前的输入生成一个 3 秒的数组。这真的是你要找的吗?


1文档实际上说你应该返回null或者undefined如果你想从结果中删除一个项目。

于 2013-08-08T21:47:46.790 回答
0

我认为这不是$.map您要在这里寻找的东西。each()可能会更好:

var oldArr = [0, 1, 2];
var newArr = [];

$.each(oldArr, function(idx, obj){
    if (obj > 0)
        newArr.push(obj + 1);
})
alert(newArr);
于 2013-08-08T21:50:32.987 回答
0

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

  1. 您没有n在 中设置$.map,这就是数组相同的原因。
  2. 您的数组中没有任何内容小于 0

这是我将如何执行此操作(假设您希望任何大于0 的内容不为空):

var newArr = $.map(oldArr, function(n) { return n ? n + 1 : null });
于 2013-08-08T21:51:55.543 回答