在数组中找到不同的元素并返回其位置

时间:2018-03-27 12:16:36

标签: javascript arrays loops

试图解决这个问题:

此数组采用以下格式的动物数组:

 ['sheep', 'sheep', 'sheep', 'sheep', 'peehs', 'sheep']
  

这些动物都将是正确的方式。除了1只动物!
  您的函数应返回其索引位置   这些动物并不总是绵羊,但它永远都是同一种动物。

我尝试过不同的方法,比如array.sort(),但这样做会返回错误的索引。

到目前为止,这是我的代码:

function findWrongWayAnimal (field) {
  for(let i =0; i<field.length; i++){
    if(field[i] !== field[i+1] || field[i] !== field[i-1]){
      return field.indexOf(field[i]);
    }
  }
}

无论我做什么,无论我改变什么,当错误的动物在阵列中间时,它总是返回0。 有人可以帮我一把吗?

4 个答案:

答案 0 :(得分:4)

这是一个混合包中的reduce和find

&#13;
&#13;
var arr = ['sheep', 'sheep', 'sheep', 'sheep', 'peehs', 'sheep']
var occurrences = arr.reduce((obj, item) => {
  obj[item] = (obj[item] || 0) + 1;
  return obj;
}, {}); // count occurrences

console.log(
 // show the index of the item that has an occurrence of 1
 arr.indexOf(Object.keys(occurrences).find(key => occurrences[key] === 1))
)
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您需要&&而不是||,因为您需要检查它是否与至少2个其他元素不同。此外,您需要对数组的第一个和最后一个元素进行不同的检查,因为它们不会分别拥有i-1i+1

&#13;
&#13;
var animals1 = ['peehs', 'sheep', 'sheep', 'sheep', 'sheep', 'sheep'];
var animals2 = ['sheep', 'sheep', 'sheep', 'sheep', 'peehs', 'sheep']
var animals3 = ['sheep', 'sheep', 'sheep', 'sheep', 'sheep', 'peehs']

function findWrongWayAnimal (field) {
  for(let i =0; i<field.length; i++){
  // Handle the first element of the array.
      if(i == 0) {
         if(field[i] !== field[i+1] && field[i] !== field[i+2]) {
            return 0;
         }
      // Handle the last element
      } else if(i == field.length && field[i] !== field[i-1] && field[i] !== field[i-2]) {
            return field.length - 1;
      } else if(field[i] !== field[i+1] && field[i] !== field[i-1]){
          return field.indexOf(field[i]);
    }
  }
}

console.log(findWrongWayAnimal(animals1));
console.log(findWrongWayAnimal(animals2));
console.log(findWrongWayAnimal(animals3));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

var temp = ['sheep', 'sheep', 'sheep', 'sheep', 'peehs', 'sheep'];

function findWrongWayAnimal (field) {
  for(let i =0; i<field.length; i++){
     for(let j =0; j<field.length; j++){
       if(field[i]!= field[j]){
          return j
       }
     }
  }
}

console.log(findWrongWayAnimal(temp))

答案 3 :(得分:0)

你的方法中的问题是循环的第一步是i = 0, 所以field [i-1]就像说字段[-1],它返回undefined。因此,您的函数将始终返回0,因为字段[0]!== undefined