Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
return";偶数;如果其他数字为奇数和;“奇数”;其他数字甚至是javascript_Javascript_Arrays_Outliers_Declarative - Fatal编程技术网

return";偶数;如果其他数字为奇数和;“奇数”;其他数字甚至是javascript

return";偶数;如果其他数字为奇数和;“奇数”;其他数字甚至是javascript,javascript,arrays,outliers,declarative,Javascript,Arrays,Outliers,Declarative,我有两个问题,如何在数组中获取值而不是值,以及如何使这段代码更短、更具声明性 arr=[16,4,11,20,2] arrP=[7,4,11,3,41] arrTest=[2,4,0100,4,72602,36] 函数findOutlier(arr){ 常量isPair=(num)=>num%2==0 偶数=0 count奇数=0 arr1=[] arr2=[] 常量结果=arr.filter((ele,i)=>{ 如果(isPair(ele)){ 偶数++ arr1.推送(ele) }否则{

我有两个问题,如何在数组中获取值而不是值,以及如何使这段代码更短、更具声明性

arr=[16,4,11,20,2]
arrP=[7,4,11,3,41]
arrTest=[2,4,0100,4,72602,36]
函数findOutlier(arr){
常量isPair=(num)=>num%2==0
偶数=0
count奇数=0
arr1=[]
arr2=[]
常量结果=arr.filter((ele,i)=>{
如果(isPair(ele)){
偶数++
arr1.推送(ele)
}否则{
奇数++
arr2.推力(ele)
}
})
返回count偶数>count奇数?arr2:arr1
}

log(findOutlier(arrTest))
过滤两次可能更可读

even = arr.filter((x) => x % 2 == 0);
odd = arr.filter((x) => x % 2 == 1);
if (even.length > odd.length) {
    return even;
} else {
    return odd;
}

如果你想用一个循环来做这件事,考虑使用数组<代码> Reals< /Cult>方法将每个数字放入一个偶数或奇数的桶中,然后比较这些桶在返回时的长度:

函数findOutlier(arr){
排序常数=arr.reduce((acc,el)=>{
acc[el%2]。推送(el);
返回acc;
},{ 0: [], 1: [] })
返回已排序的[0]。长度>已排序的[1]。长度?已排序的[1]:已排序的[0];
}
常量arr=[1,2,3,4,5,6,7,8,9];

console.log(findOutlier(arr))既然OP澄清了需求(至少在注释中),这就允许采用不同的方法:

函数findOutlier(数组){
设奇数=未定义,偶数=未定义;
for(让我来看看数组){
设isEven=i%2==0;
if(奇数!==未定义和偶数!==未定义)
返回为偶数?奇数:偶数;
如果(isEven)偶数=i;
else奇数=i;
}
if(奇数!==未定义和偶数!==未定义)
返回数组[array.length-1];
}

console.log(findOutlier([2,4,6,8,10,5]))
如果其中一种类型的计数为1,而其他类型的计数大于1,则可以获取具有所需部分的对象进行收集并添加短路

const
isPair=num=>num%2==0,
findOutlier=array=>{
计数={true:[],false:[]};
for(数组的常量值){
计数[isPair(值)]。推送(值);
if(count.true.length==1&&count.false.length>1)返回count.true[0];
if(count.false.length==1&&count.true.length>1)返回count.false[0];
}
};

log(…[[16,4,11,20,2],[7,4,11,3,41],[2,4,0,100,4,7,2602,36].map(findOutlier))
这里有一个基于模结果选择
偶数
奇数
数组的解决方案

函数findOutlier(整数){
常数偶数=[],奇数=[],模=[偶数,奇数];
for(整数的常量整数){
模[Math.abs(整数%2)].push(整数);
}
返回偶数.length>odd.length?奇数:偶数;
}

log(findOutlier([2,4,0100,4,72602,36])不需要创建中间数组,只需将每个元素与其相邻元素进行比较,如果元素与相邻元素不同,则返回该元素;如果未找到异常值,则返回未定义的元素。这将在第一次遇到异常值的相同迭代中返回,并返回值本身,而不是数组

函数findOutlier(数组){
常数
len=数组长度,
isEven=(n)=>n%2==0;
for(array.entries()的常量[i,值]){
让
prev=array[(i-1+len)%len],//在<0时循环(第一个元素)
next=数组[(i+1)%len];//如果>=长度(最后一个元素),则循环
如果(isEven(值)!==isEven(上一个)&&isEven(值)!==isEven(下一个)){
返回值;
}
}
返回未定义;
}
常量数组=[[16,4,11,20,2],[7,4,11,3,41],[2,4,0,100,4,7,2602,36]]

log(…arrays.map(findOutlier))你能说明你想做什么吗?我很难理解你在寻找什么结果。你是否试图将数组拆分为
偶数
数组和
奇数
数组,然后返回较长的一个?三元数组不是向后的吗?期望的输出是什么?如果赔率和偶数都不是一,比如[1,3,2,4,6],函数应该返回什么?此外,标题似乎要求字符串输出(“偶数”、“奇数”),但这不是您的代码所做的。。。你能澄清一下吗?是否只有一个元素与其他元素不同?为什么要将它存储在数组中,你可以创建一个像
{0:0,1:0}
这样的数字并将其增加1。它将消耗更少的内存。@RinkeshGolwala,因为OP不仅需要奇数/偶数计数,还需要值……是的,OP需要获胜的数组(所有偶数或所有奇数)。明白了。ThanksHmm,实际上OP想要更短的数组,所以我调整了代码。