查找数组中唯一的数字

Tim*_*Tim 0 javascript

有人可以向我解释一下这行代码到底在做什么吗?

function findUniq(array) {
  return array.find((item) => array.indexOf(item) === array.lastIndexOf(item))    
}
Run Code Online (Sandbox Code Playgroud)

我想知道这条线到底在做什么:

return array.find((item) => array.indexOf(item) === array.lastIndexOf(item))
Run Code Online (Sandbox Code Playgroud)

我认为这里发生的是,对于数组中的每个项目,它都会将该项目的第一个索引与项目的最后一个索引进行比较。它返回彼此相等的项目。

我不明白它如何返回唯一的数组。

如果我要写这个函数,它会是这样的:

return array.find((item) => array.indexOf(item) != array.lastIndexOf(item))
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为它返回的是通用号码。

谢谢

Mos*_*abo 5

Array.prototype.find()方法采用谓词函数(根据输入参数返回 true 或 false 的函数),然后返回谓词为 true 的元素。

在您的情况下,考虑到以下情况:

var array1 = [1,2,1,3,5,2,3];
var array2 = [1,2,1,3,5,5,3];

function findUnique(array){

  return array.find(
    // The code below runs for every element of the array.
    //    - for each element, it takes the element and checks if first position, is the same as last position in the array
    (item) => array.indexOf(item) === array.lastIndexOf(item) //
  );
}

console.log("For array 1, unique item is: ",findUnique(array1));
console.log("For array 2, unique item is: ",findUnique(array2));
Run Code Online (Sandbox Code Playgroud)

Array.prototype.indexOf(yourArrayElement) 返回第一次出现的位置yourArrayElement

哦,另一方面,Array.prototype.lastIndexOf(yourArrayElement)返回最后一次出现的位置yourArrayElement

如果yourArrayElement数组中只存在一次,则第一个和最后一个位置将相同,并将Array.prototype.find()返回该元素。