数组的find()和indexOf()方法有什么区别

时间:2016-07-21 13:07:01

标签: javascript

Best way to find if an item is in a JavaScript array?

var array = [2, 5, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1


let found = array.find(x => x === 5 );
console.log(found); //5

found = array.find(x => x === 51 );
console.log(found); //undefined

用什么方法检测数组中的值?

array.indexOf(val) !== -1

typeof array.find(x => x === val ) !== 'undefined';

3 个答案:

答案 0 :(得分:3)

当你有对象数组时会出现差异。

示例

var d = [
  {a:1, b: "test"},
  {a:2, b: "test"},
  {a:3, b: "test"},
  {a:4, b: "test"},
  {a:5, b: "test"},
];
  
var r = d.find(x=> x.a===5);
console.log(r)

在这种情况下,.indexOf将不可行。

此外,array.find将返回匹配的元素,但indexOf将返回匹配元素的索引。

此外,如果目标是检查数组中是否存在值,您甚至可以查看Array.some

示例

var d = [
  {a:1, b: "test"},
  {a:2, b: "test"},
  {a:3, b: "test"},
  {a:4, b: "test"},
  {a:5, b: "test"},
];
  
var r = d.some(x=> x.a===5);
console.log(r)

参考

答案 1 :(得分:1)

Array#find返回项目本身和Array#indexOf项目的索引。

使用Array#find,您必须检查undefined,如果您要查找的值为undefined,则会产生误导。在这种情况下,我建议使用Array#indexOf,您可以在其中检查值是否不在数组中,因为-1的返回值不是有效索引。

如果您在没有ES6的系统上工作,则必须使用Array#indexOf

在您的情况下,要获得确认值是否在数组中,您可以使用Array#includes(ES6),它返回一个boolen值。

答案 2 :(得分:0)

根据the official MDN documentation

如果数组中的元素满足提供的测试函数,则find()方法会在数组中返回。否则返回undefined。

然而,

indexOf()方法会返回第一个索引,在该索引中可以找到给定元素,如果不存在,则返回-1。 / p>

总之,每种方法都是专用的。