如何解决我的代码返回在两个特定阵列“未定义”?

问题描述 投票:0回答:4

我是初学者,在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

javascript arrays for-loop slice
4个回答
1
投票

您还可以使用减少俱乐部位数为键值对,比发现它的值为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
投票

对于数组中的每个元素你检查它是否等于第一个和最后一个位置:

 //❌                    ✔️
 //🔽                    🔽
   [0, 1, 1, 1, 1, 1, 1, 1]
 //⬆️

现在的第一个元素(这是一个找到),相较于最后一个元素将导致“不公平”,因为0不是1,而是检查,首先会导致“平等”为你比较elementto本身。


对于它来检测第一和最后一个元素,不检查它是否不平等的第一和最后一个,但它阉了不平等以前和下一个,然后跳回开始前或结束时,指数离开阵列。

通过它也适用于最后和第一个元素:

 //   ✔️                 ✔️
 //   🔽                 🔽
   [0, 1, 1, 1, 1, 1, 1, 1]
 //⬆️

0
投票

也许最简单的方法是,作为乔纳斯肾母细胞建议,找到的第一个不等于它的前身和它的后继者都在列表的最后缠绕:

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运营商来处理滑出列表的末尾。


0
投票
 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到乔纳斯肾母细胞:)

© www.soinside.com 2019 - 2024. All rights reserved.