试图解决这个问题:
此数组采用以下格式的动物数组:
['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。 有人可以帮我一把吗?
答案 0 :(得分:4)
这是一个混合包中的reduce和find
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;
答案 1 :(得分:2)
您需要&&
而不是||
,因为您需要检查它是否与至少2个其他元素不同。此外,您需要对数组的第一个和最后一个元素进行不同的检查,因为它们不会分别拥有i-1
和i+1
。
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;
答案 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