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