【问题标题】:Finding a Single Integer in an array using Javascript使用 Javascript 在数组中查找单个整数
【发布时间】:2017-06-18 00:02:40
【问题描述】:

我能够在“减少”之后提取所有单个整数,但当所有重复项且输出应为 0 时无法正常工作,没有遇到我的 else 或 else if - 代码一直输出 0 与单个整数

    var singleNumber = function(nums) {
       var sorted_array = nums.sort();

       for (var i=0; i < sorted_array.length; i++){
         var previous = sorted_array[i-1];
         var next = sorted_array[i+1];
         var singles = {key: 0};
         var singlesArray = [];

         if (sorted_array[i] !== previous && sorted_array[i] !== next){
           singlesArray.push(sorted_array[i]);

           singlesArray.reduce(function(singles, key){
               singles.key = key;
               //console.log('key', key);
               return singles.key;
          },{});

        }
       else if(singlesArray.length === 0) {
          singles.key = 0;
          return singles.key;
         }
     }
    console.log('singles.key', singles.key);
    return singles.key;
   };

  console.log(singleNumber([2,1,3,4,4]));

【问题讨论】:

  • 在任何时候都不会分配给singleNumber() 范围内的singles 变量。唯一一次给singles 分配一个非零值是在闭包的范围内。
  • 谢谢@Phylogenesis 我明白你的意思,但坚持“如何”为 singleNumber() 范围内的单打分配一个非零值。我尝试将单曲移到 for 循环之外和 singleNumber() 内,仍然为 0 ..
  • 其他人有什么想法吗?我将条件重新安排在第一个“if 语句”中,但仍然得到 singles.key = 0 ... 将不胜感激
  • 我不清楚你的问题。你希望singleNumber() 最终做什么?只返回一组不同的整数? singleNumber([2,1,3,4,4]) //[2,1,3,4]
  • 感谢@Kevin。我想将 1、2、3 作为整数返回……如果只输入了重复项,则将 0 作为整数返回。我对范围做了一些更改,到目前为止它正在返回 [1] .. 你能看到这个 jsbin 吗? jsbin.com/qujuwas/82/edit?js,console

标签: javascript arrays integer reduce


【解决方案1】:
// tests
const n1 = [1,2,3,4,4]   //[1,2,3]
const n2 = [1]   //[1] 
const n3 = [1,1]  //0
const n4 = [1,1,1]  //0
const n5 = [1,5,3,4,5]  //[1,3,4]
const n6 = [1,2,3,4,5]  //[1,2,3,4,5]
const n7 = [1,5,3,4,5,6,7,5]  //[1,3,4,6,7]

const singleNumber = numbers => {

  const reducer = (acc, val) => {
    // check to see if we have this key
    if (acc[val]) {
      // yes, so we increment its value by one
      acc[val] = acc[val] + 1
    } else {
      // no, so it's a new key and we assign 1 as default value
      acc[val] = 1
    }
    // return the accumulator
    return acc
  }

   // run the reducer to group the array into objects to track the count of array elements
  const grouped = numbers.reduce(reducer, {})

  const set = Object.keys(grouped)
    // return only those keys where the value is 1, if it's not 1, we know its a duplicate
    .filter(key => {
      if (grouped[key] == 1) {
        return true
      }
    })
    // object.keys makes our keys strings, so we need run parseInt to convert the string back to integer
    .map(key => parseInt(key))

  // check to array length.  If greater than zero, return the set.  If it is zero, then all the values were duplicates
  if (set.length == 0) {
    return 0
  } else {
    // we return the set
    return set
  }
}

console.log(singleNumber(n7))

https://jsbin.com/sajibij/edit?js,console

【讨论】:

  • 谢谢@Kevin .. 实际上,我很幸运地通过 jsbin 获得了以下代码,但适当地注意到了您的上述代码,我可以向往并努力实现 :) 谢谢jsbin.com/herapozite/1/edit?js,console
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2021-12-14
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多