如何为 JS Array.includes() 提供 equals/hash 函数? [复制]

Posted

技术标签:

【中文标题】如何为 JS Array.includes() 提供 equals/hash 函数? [复制]【英文标题】:How to supply an equals/hash function to JS Array.includes()? [duplicate] 【发布时间】:2021-10-25 01:47:20 【问题描述】:

有没有办法让Array.prototype.includes() 也可以通过提供等于+哈希谓词来处理非原始对象?

例如给定一个列表:

var list = [id:111,id:222,id:333];

console.log(list.includes(id:333);
// output: false

从上面的例子看来,相等是由对象标识(即内存地址)而不是由值完成的,这当然是完全有意义的,也是预期的。但是有没有办法为list.includes() 提供一个相等函数,以便使用id 的原始值来确定相等?

Arrays.includes() 文档没有提到任何关于接受相等谓词的内容。

【问题讨论】:

check if an array “includes” an item in javascript 的副本。 【参考方案1】:

Array#includes 有两个参数:

searchElement:要搜索的值。

fromIndex(可选):此数组中开始搜索 searchElement 的位置。

您可以改用Array#some

const list = [id:111,id:222,id:333];

console.log( list.some((id) => id === 333) );

【讨论】:

太棒了!谢谢!尽管引入了单独的方法some() 而不是让includes() 接受可选谓词,但这是出乎意料的;对我来说,从逻辑上讲,some()includes() 相同。 @ccpizza includes 搜索指定值;您不想为每个值创建单独的函数;但您也应该能够搜索函数对象。 Array#includes 使用sameValueZero 算法来确定是否找到了一个元素。你可以阅读更多关于它的信息。 Array#some 测试数组中是否至少有一个元素通过了提供的函数实现的测试

以上是关于如何为 JS Array.includes() 提供 equals/hash 函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

array.includes的使用

浏览器支持 array.includes 和替代品

Array.includes 总是错误的 javascript

使用 Array.includes() 和测试重复项的 JavaScript 问题

array.includes 使用正则表达式返回 false

检查数组中是不是存在迭代器时,array.includes 不起作用[重复]