【问题标题】:Javascript go through array and find multiple of 3 and give out the numberJavascript遍历数组并找到3的倍数并给出数字
【发布时间】:2023-03-15 23:05:01
【问题描述】:

我想查看数组并找到 3 的最小倍数,然后返回值或返回 false。

我已经按数字的大小对数组进行了排序,然后我使用了模运算符。

这是我所拥有的,但它似乎不起作用。这是我的代码:

function firstMultipleOf3(numbers) {
    numbers.sort(function(a, b){return a - b});
    console.log(numbers);
    for (var i = 0 ; i < firstMultipleOf3.length ; i++) {
        if (firstMultipleOf3[i] % 3 === 0) {
            return [i];
        } else {
            return false;
        }
    }
}

console.log(firstMultipleOf3([52,98,42,17,33,24])); // 42
console.log(firstMultipleOf3([38,52,34,13,41]));    // false

【问题讨论】:

  • [52,98,42,17,33,24].sort().find(n =&gt; n % 3 === 0)
  • @dave Array#sort 没有回调将数组中的值排序为字符串[3,111,3,2,33].sort() // [111, 2, 3, 3, 33]
  • firstMultipleOf3.length 等于 1 (因为在这种情况下,您的函数只需要 1 个参数)。我想你的意思是写numbers.length

标签: javascript arrays sorting modulo


【解决方案1】:

如果没有元素匹配,你想返回false。因此它需要在循环之外:

for (var i = 0; i < numbers.length; i++) 
  if (numbers[i] % 3 === 0) 
    return numbers[i];

return false;

我会怎么做:

function firstMultipleOf3(numbers) {
  let minimum = false;
  for(const n of numbers) 
    if(!(n % 3) && (!minimum || n < minimum))
       minimum = n;
   return minimum;
}

【讨论】:

    【解决方案2】:

    const numbers = [52, 98, 42, 17, 33, 24];
    const find = numbers => numbers.sort((a, b) => a - b).find(n => n % 3 === 0) || false;
    const selected = find(numbers)
    console.log(selected);
    console.log(find([38, 52, 34, 13, 41]));

    【讨论】:

      【解决方案3】:

      在您的 for 循环中,您使用函数名称而不是数组名称(数字)进行测试。此外,您在 if 条件下执行此操作。 而且,通过示例输出,您需要 numbers[i] 而不是索引本身。

      【讨论】:

        【解决方案4】:
        • 创建一个通用函数并为其命名。
        • 使用.sort()对数组进行排序
        • 使用.find() 在数组中查找传递值的倍数。该方法将返回通过回调函数或null实现的测试的值。
        • 使用|| 显式返回false,以防.find() 返回undefined

        演示:

        let findMultipe = (a, m) => a.sort((a, b) => (a - b))
                                     .find((n) => (n % m == 0)) || false;
        
        console.log(findMultipe([52, 98, 42, 17, 33, 24], 3));
        console.log(findMultipe([38, 52, 34, 13, 41], 3));

        【讨论】:

        • 尽量避免(a &lt; b) 它在大多数情况下都可以工作,但可能会以意想不到的方式失败并导致难以调试的问题:).. 只需使用(a - b)
        • @Keith 感谢您的意见。我会记住的:)
        • 注意,如果您认为0 是每个数字的倍数,如果您的数组包含0,Mohammad 的答案仍将返回false。这是因为0 || false 将被评估,而0 是一个假值。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多