【问题标题】:Finding first occurrence of each digit in an array查找数组中每个数字的第一次出现
【发布时间】:2021-10-31 18:20:54
【问题描述】:

依次取数组的每个四位数字,当找到所有数字 0-9 时,返回您所在的数字。如果无法找到所有数字,则返回“缺少数字!”

我尝试循环然后设置条件 if (i != i+1) push into new array 这只是给了我数组,很明显我的逻辑是错误的。谁能帮帮我

例如调用这个函数

arr = findAllDigits([5175, 4538, 2926, 5057, 6401, 4376, 2280, 6137, 8798, 9083]) 

代码应该返回 5057。

打电话时

arr = findAllDigits([4883, 3876, 7769, 9846, 9546, 9634, 9696, 2832, 6822, 6868]) 

应该返回“缺失的数字”

function findAllDigits(arr) {
  newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] != arr[i + 1]) newArr.push(arr[i]);
    console.log(newArr);
  }
}

我是否需要拆分,因为它将逗号之前的所有内容都视为 一个数字,然后迭代?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你可以在这里使用Set

    循环array然后创建一个set,如果set的大小变成10,你必须返回当前数字,因为你需要检查0-9

    function findAllDigits(arr) {
      const set = new Set();
      for (let n of arr) {
        String(n)
          .split("")
          .forEach((c) => set.add(c));
        if (set.size === 10) return n;
      }
      return "Missing digits!";
    }
    
    const arr1 = [5175, 4538, 2926, 5057, 6401, 4376, 2280, 6137, 8798, 9083];
    const arr2 = [4883, 3876, 7769, 9846, 9546, 9634, 9696, 2832, 6822, 6868];
    console.log(findAllDigits(arr1));
    console.log(findAllDigits(arr2));

    【讨论】:

    • 简单而美丽
    【解决方案2】:

    您的 for 循环只是检查数组条目是否等于下一个条目。您需要拆分每个条目中的数字并单独存储它们:

    function findAllDigits(arr) {
      newArr = [];
      for (let i = 0; i < arr.length; i++) {
        // now iterate the individual digits
        const entryAsString = arr[i].toString();
        for (let j = 0; j < entryAsString.length; j++) {
          // if we haven't seen the digit before, add it to the array
          if(!newArr.includes(j) {
            newArr.push(j);
          }
        }
        // we know we have all digits when newArr is 10 entries long
        if (newArr.length) {
          console.log(arr[i]);
          // you can also return this value here
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      另一种解决方案:

      const arr1 = [5175, 4538, 2926, 5057, 6401, 4376, 2280, 6137, 8798, 9083];
      const arr2 = [4883, 3876, 7769, 9846, 9546, 9634, 9696, 2832, 6822, 6868];
                  
      const findAllDigits = (arr) => {
      
          // Declare new Set: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
        const digits = new Set();
      
          // return the first item from array that fits the condition, 
          // find() method: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
        return arr.find((curr) => (
      
            // String(5175) -> '5175' : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String
            // [...'5175'] ->  ['5','1','7','5'] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
            // .forEach(digits.add, digits) - forEach with callback function and context : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
            // comma operator lets get rid of return : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
          [...String(curr)].forEach(digits.add, digits),
      
            // condition - is find() method need to return an item  
          (digits.size === 10)
           
          // if returned value is not undefined or null return finded number oterwise error string
          // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
        )) ?? "Missing digits!";
      };
                      
      console.log(findAllDigits(arr1)); //5057
      console.log(findAllDigits(arr2)); //Missing digits!
      

      【讨论】:

      • 您介意解释一下这是如何工作的吗?
      • @che2programmer 我添加了描述每行如何工作的 cmets,并带有文档链接
      猜你喜欢
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多