不确定为什么这段代码不起作用编辑*它应该只返回数组中的奇数元素
function findOdd(A) {
var arr = [];
for (var i=0; i<A.length; i++){
if(arr.indexOf(A[i]) == -1){
arr.push(A[i]);
}
else {
arr.splice(A[i],1);
}
}
return arr;
}
对于测试用例,findOdd([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5])应该返回但是它返回[20,-1,3,5]。任何想法为什么这不起作用,因为我认为它应该?谢谢。
答案 0 :(得分:0)
您只需更改此行
即可arr.splice(A[i],1);
到
arr.splice(arr.indexOf(A[i]),1); //remove it from index of this element since splice is taking index rather than element itself.
<强>样本强>
function findOdd(A) {
var arr = [];
for (var i=0; i<A.length; i++){
if(arr.indexOf(A[i]) == -1){
arr.push(A[i]);
}
else {
arr.splice(arr.indexOf(A[i]),1);
}
}
return arr;
};
var output = findOdd([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5]);
console.log( output );
答案 1 :(得分:0)
您也可以按照以下方式非常有效地完成工作;
在这种特殊情况下,hash
生成的.reduce()
对象看起来像
{ odd : { '1': 0, '2': 0, '3': 0, '4': 0, '5': 3, '20': 0, '-1': 0, '-2': 0 },
even: { '1': 2, '2': 2, '3': 2, '4': 2, '5': 0, '20': 2, '-1': 2, '-2': 2 } }
Object.keys()
部分从hash.odd
子对象收集所需信息。
function oddMany(a){
var hash = a.reduce((h,n) => h.odd[n] ? (h.even[n] = h.odd[n] + 1, h.odd[n] = 0, h)
: (h.odd[n] = h.even[n] + 1 || 1, h.even[n] = 0, h), {odd:{},even:{}});
return Object.keys(hash.odd).reduce((r,k) => hash.odd[k] ? r.concat(k) : r ,[]);
}
var arr = [20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5];
console.log(oddMany(arr));