【问题标题】:Changing array value when condition is met in javascript在javascript中满足条件时更改数组值
【发布时间】:2025-11-23 10:00:02
【问题描述】:

假设我有一个数组var arr = [3,4,5,6,7,9];,我记录的内容如下:

$.each(arr, function(k, v) {
  console.log(v);
}

当我记录内容时,我想检查当前值是否大于例如var limit = 5;

如果当前值大于limit,我想替换/更改该值,让我们说字母A 并将其打印出来。所以我记录的arr 数组看起来像这样3,4,5,A,A,A

我在想这样的事情:

$.each(arr, function(k,v) {
  if (v > limit) {
    // set this specific value equal to limit
    // log changed value
  }
  console.log(v); // otherwise just log the value found
});

我试过了,但它什么也没做,也没有错误。

【问题讨论】:

  • 您的代码似乎没问题。除了缺少右括号。虽然第一个代码 sn-p 缺少右括号。
  • 另请注意,根据您的评论,您将打印每个修改后的值两次

标签: javascript jquery arrays loops


【解决方案1】:

JSFIDDLE:http://jsfiddle.net/nsgch/8/

var arr = [3,4,5,6,7,9];
var limit = 5;

$.each(arr, function(k,v) {
  if (v > limit) {
       arr[k] = 'A'; 
  }
  console.log( arr[k] ); 
});

【讨论】:

    【解决方案2】:

    这取决于您如何执行“将此特定值设置为等于限制”。如果你在做;

    $.each(arr, function(k,v) {
      if (v > limit) {
        v = "A";
        // log changed value
      }
      console.log(v); // otherwise just log the value found
    });
    

    您只更改了局部变量 v,而不是元素 arr[k]。你可以像@san.chez answer一样更新arr[k],或者使用$.map

    var filtered = $.map(arr, function(v,k) {
      if (v > limit) {
        return "A";
      }
    
      return v;
    });
    

    ... 那么filtered 将是您的数组[1,2,4,A,A],而arr 将保持不变。注意kv参数的交换; jQuery 就是这样一致的 /sarcasm


    另请注意,您的两个代码示例都缺少结束 }

    【讨论】:

      【解决方案3】:

      你可以简单地写这样的东西来处理这些场景......

      想象一下你有:

      const arr = [0, 1, 6, 12, 0, 78];
      

      使用类似的东西:

      arr.map(a => a === 0 ? "a" :a);
      

      结果将是:

      ["a", 1, 6, 12, "a", 78];
      

      【讨论】:

        【解决方案4】:
        var arr = [3,4,5,6,7,9];
        arr=arr.map(function(elem){ return elem>5?"A":elem; });
        arr.forEach(function(elem){
            console.log(elem);
        })
        

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

        【讨论】:

        • 值得注意的是Array.prototype.map是ES5方法,不是跨浏览器;可以添加ES5 shim 以确保支持旧浏览器
        • 据我所知,我发布的链接中有兼容性信息。如果您使用的是旧版浏览器,您可以免费下载一个新的 :)
        • 我知道您发布的链接中有一个兼容性部分(垫片 I 链接到该部分的链接!),但仅适用于 drive-byers 没有点击你的链接的人,请务必注意。