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';
答案 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>
总之,每种方法都是专用的。