惊讶的是这个问题仍然没有最新的语法,我来贡献我的看法。
假设我们有一个对象数组 arrObj ,我们想在其中搜索 obj .
Array.prototype.indexOf ->(返回 索引或 -1)通常用于查找数组中元素的索引。如果您传递对相同对象的引用,则也可以用于搜索对象。
let obj = { name: 'Sumer', age: 36 };
let arrObj = [obj, { name: 'Kishor', age: 46 }, { name: 'Rupen', age: 26 }];
console.log(arrObj.indexOf(obj));
console.log(arrObj.indexOf({ name: 'Sumer', age: 36 }));
console.log([1, 3, 5, 2].indexOf(2));
Array.prototype.includes -> (返回 true 或 false)
console.log(arrObj.includes(obj))
console.log(arrObj.includes({ name: 'Sumer', age: 36 }))
console.log([1, 3, 5, 2].includes(2))
Array.prototype.find -> (使用回调函数,返回第一个在回调函数中返回true的值/对象)。
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }
console.log([1, 3, 5, 2].find(e => e > 2)); //3
Array.prototype.findIndex -> (接受回调函数,返回第一个返回true的值或对象的索引)。
console.log(arrObj.findIndex(e => e.age > 40)); //1
console.log(arrObj.findIndex(e => e.age > 40)); //1
console.log([1, 3, 5, 2].findIndex(e => e > 2)); //1
由于find和findIndex接受回调函数,我们可以通过创造性地设置true条件,从数组中获取任何对象(即使我们没有引用)。
~[1,2,3].indexOf(4)
将返回 0,被评估为 false,而~[1,2,3].indexOf(3)
将返回 -3,被评估为 true。 - lordvlad~
不能将值转换为布尔型,你需要使用!
。但在本例中,你需要检查是否等于-1,所以函数可能会结束返回[1,2,3].indexOf(3) === -1。~
是二进制非运算符,它会独立地翻转每个位的值。 - mcfedr[1,2,3].indexOf(4)
实际上会返回-1。正如@mcfedr指出的,~
是比特非运算符,参见ES5 11.4.8。问题在于,由于-1的二进制表示只包含1,其补码为0,这会被评估为false。任何其他数字的补码都不为零,因此为true。所以,~
可以很好地与indexOf
一起使用。 - mknecht[[1,2],[3,4]].includes([3,4])
在哪里? - mplungjan