我是初学者,在JavaScript和目前在代码战争训练,我有一些问题,在这里我的代码。我有一个任务,找到一个给定的数组中的一个数字,从同一阵列中的其他数字不同。当我运行只在这两个特定的阵列代码返回测试“未定义”。所以,我想知道为什么,我应该如何提高我的代码?也许我错过了一些东西。感谢您的帮助。
这里是我的代码:
function findUniq(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[0] && arr[i] !== arr.slice(-1)[0]) {
return arr[i];
}
}
}
所以,我有这两个数组:
findUniq([0, 1, 1, 1, 1, 1, 1, 1]);
预期0
,但返回undefined
。
findUniq([8, 8, 8, 8, 8, 8, 8, 7]);
预期7
,也返回undefined
。
您还可以使用减少俱乐部位数为键值对,比发现它的值为1的关键
function findUniq(input){
let op = input.reduce((op,inp)=>{
if(op[inp]){
op[inp]++;
} else {
op[inp] = 1
}
return op
},{})
return Object.keys(op).find(e=> op[e] === 1)
}
console.log(findUniq([0, 1, 1, 1, 1, 1, 1, 1]))
console.log(findUniq([8, 8, 8, 8, 8, 8, 8, 7]))
对于数组中的每个元素你检查它是否等于第一个和最后一个位置:
//❌ ✔️
//🔽 🔽
[0, 1, 1, 1, 1, 1, 1, 1]
//⬆️
现在的第一个元素(这是一个找到),相较于最后一个元素将导致“不公平”,因为0不是1,而是检查,首先会导致“平等”为你比较elementto本身。
对于它来检测第一和最后一个元素,不检查它是否不平等的第一和最后一个,但它阉了不平等以前和下一个,然后跳回开始前或结束时,指数离开阵列。
通过它也适用于最后和第一个元素:
// ✔️ ✔️
// 🔽 🔽
[0, 1, 1, 1, 1, 1, 1, 1]
//⬆️
也许最简单的方法是,作为乔纳斯肾母细胞建议,找到的第一个不等于它的前身和它的后继者都在列表的最后缠绕:
const findUnique = arr => arr.find((n, i, a) =>
n !== a[(i - 1) % arr.length] && n !== a[(i + 1 % arr.length)]
)
console.log(findUnique([1, 1, 3, 1, 1, 1, 1, 1])) //~> 3
console.log(findUnique([0, 1, 1, 1, 1, 1, 1, 1])) //~> 0
console.log(findUnique([8, 8, 8, 8, 8, 8, 8, 7])) //~> 7
请注意,这里使用%
,使用Javascript的remainder or modulus运营商来处理滑出列表的末尾。
function findUniq(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[arr.length - (i-1)] && arr[i] !== arr[arr.length + (i-1)] && arr[i] !== arr[i+1] && arr[i] !== arr[i-1]) {
return arr[i];
}
}
}
那么这里是我自己的答案感谢大家,我会主动关注你有任何的批评,以improve.Thanks到乔纳斯肾母细胞:)