如何为 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 总是错误的 javascript
使用 Array.includes() 和测试重复项的 JavaScript 问题