【问题标题】:Javascript loop an array to find numbers divisible by 3Javascript循环数组以查找可被3整除的数字
【发布时间】:2016-03-30 18:41:06
【问题描述】:

我需要找到正确的方法让 javascript 循环遍历一个数组,找到所有可被 3 整除的数字,并将这些数字推入一个新数组。

这是我目前所拥有的......

var array = [],
    threes = [];

function loveTheThrees(array) {
    for (i = 0, len = array.length; i < len; i++) {
    threes = array.push(i % 3);
  }
  return threes;
}

因此,如果我们通过函数传递一个由 [1, 2, 3, 4, 5, 6] 组成的数组,它会将数字 3 和 6 推送到“threes”数组中。希望这是有道理的。

【问题讨论】:

  • 函数 loveTheThrees(a) { a.filter(function(a, i) {return a % 3 == 0}) }
  • 您将i%3 推入array,然后将所有array 重新分配给三个。建议使用更有意义的名字而不是array,了解js中的数组和赋值操作

标签: javascript arrays loops for-loop


【解决方案1】:

您可以使用Array#filter 完成此任务。

filter() 为数组中的每个元素调用一次提供的callback 函数,并构造一个包含所有callback 返回真值或a value that coerces to true 的值的新数组。 callback 仅对具有赋值的数组索引调用;对于已被删除或从未被赋值的索引,它不会被调用。未通过callback 测试的数组元素将被简单地跳过,并且不会包含在新数组中。

function loveTheThrees(array) {
    return array.filter(function (a) {
        return !(a % 3);
    });
}
document.write('<pre>' + JSON.stringify(loveTheThrees([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 0, 4) + '</pre>');

【讨论】:

  • 该死的你用更快的手指赢了。
【解决方案2】:
var array = [],
three = [];

function loveTheThrees(array) {
for (i = 0, len = array.length; i < len; i++) {
    if(array[i] % 3 == 0){
        three.push(array[i]);
     }
   }
 }

【讨论】:

    【解决方案3】:

    console.log([1, 2, 3, 4, 5, 6, 7].filter(function(a){return a%3===0;}));

    Array.filter() 如果回调返回 true,则遍历数组并将当前对象移动到另一个数组。在这种情况下,我编写了一个回调,如果它可以被三整除,则返回 true,因此只有这些项目将被添加到不同的数组中

    【讨论】:

    • Array.filter() 如果回调返回true,则遍历数组并将当前对象移动到另一个数组。在这种情况下,我编写了一个回调,如果它可以被三整除,则返回 true,因此只有这些项目将被添加到不同的数组中
    【解决方案4】:

    使用 Nina 建议的过滤器无疑是更好的方法。但是我假设您是初学者并且可能还不了解回调,在这种情况下,此功能将起作用:

    function loveTheThrees(collection){
            var newArray = []
            for (var i =0; i< collection.length;i++){
                if (myArray[i] % 3 === 0){
                    newArray.push(collection[i])
                }
            }
            return newArray;
        }
    

    【讨论】:

      【解决方案5】:

      loveTheThrees=(arr)=&gt;arr.filter(el=&gt;Boolean(parseFloat(el)) &amp;&amp; isFinite(el) &amp;&amp; !Boolean(el%3))

      es6版本+跳过非数字

      loveTheThrees([null,undefined,'haha',100,3,6])

      结果:[3,6]

      【讨论】:

        【解决方案6】:

        检查数字是否可以被 3 整除,如果可以,则将其添加到数组中。试试这个

        function loveTheThrees(array) {
            for (i = 0, len = array.length; i < len; i++) {
              if(array[i] % 3 == 0){
                three.push(array[I]);
             }
          }
        

        【讨论】:

        • 如果有人可以编辑这个代码块,那将会很有帮助。我在移动应用上,没有添加代码块的功能。谢谢
        【解决方案7】:
        var originalArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        function loveTheThrees(array1) {
          var threes = [];
          for (var i = 0; i < array1.length; i++) {
            if (array1[i] % 3 === 0) {
              threes.push(array1[i]);
            }
          }
          return threes;
        }
        loveTheThrees(originalArray);
        

        【讨论】:

        • 欢迎来到 Stack Overflow!虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
        【解决方案8】:

        在 ES6 中:

        const arr = [1, 33, 54, 30, 11, 203, 323, 100, 9];
        
        // This single line function allow you to do it:
        const isDivisibleBy3 = arr => arr.filter(val => val % 3 == 0);
        
        
        console.log(isDivisibleBy3(arr));
        // The console output is [ 33, 54, 30, 9 ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-11
          • 2012-11-10
          相关资源
          最近更新 更多