Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript在数组中查找单个整数_Javascript_Arrays_Integer_Reduce - Fatal编程技术网

使用Javascript在数组中查找单个整数

使用Javascript在数组中查找单个整数,javascript,arrays,integer,reduce,Javascript,Arrays,Integer,Reduce,我能够在“reduce”之后提取所有单整数,但在所有重复项都存在且输出应为0时不起作用,没有命中我的else或if-code相对于单整数一直输出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]

我能够在“reduce”之后提取所有单整数,但在所有重复项都存在且输出应为0时不起作用,没有命中我的else或if-code相对于单整数一直输出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]));
var singleNumber=函数(nums){
var sorted_array=nums.sort();
for(var i=0;i

在任何情况下都不能将
singleNumber()
范围内的
singles
变量赋值。只有在闭包的作用域内才能将非零值分配给
singles
。谢谢@Phylogenesis我明白你的意思,但我仍然坚持“如何”将非零值分配给singleNumber()作用域内的singles。我试着将单打移动到for循环外和singleNumber()内,仍然是0。还有其他人有什么想法吗?我重新安排了条件语句,使其位于第一个“if语句”中,但仍然得到singles.key=0。。。我不清楚你的问题。您希望
singleNumber()
最终做什么?只返回一组不同的整数<代码>单号([2,1,3,4,4])/[2,1,3,4]
谢谢@Kevin。我想返回1,2,3作为整数。。如果只输入了重复项,则0为整数。我对scope做了一些更改,到目前为止它正在返回[1]。。你能看到这个jsbin吗?谢谢你,凯文。。事实上,我通过jsbin幸运地获得了以下内容,但我及时地注意到了您的上述代码,这是我渴望并努力实现的:)谢谢您
// 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))