如何向 JS Array.includes() 提供 equals/hash 函数?
How to supply an equals/hash function to JS Array.includes()?
有没有办法通过提供 equals+hash 谓词让 Array.prototype.includes()
也能处理非原始对象?
例如给定一个列表:
var list = [{id:111},{id:222},{id:333}];
console.log(list.includes({id:333});
// output: false
从上面的例子来看,相等性似乎是由对象标识(即内存地址)而不是值来完成的,这当然是完全合理的,也是预期的。但是有没有办法为 list.includes()
提供相等函数,以便使用 id
的原始值来确定相等性?
Arrays.includes() 文档没有提及任何关于接受相等谓词的内容。
Array#includes
有两个参数:
searchElement: The value to search for.
fromIndex (Optional): The position in this array at which to begin searching for searchElement.
您可以使用 Array#some
代替:
const list = [{id:111},{id:222},{id:333}];
console.log( list.some(({id}) => id === 333) );
有没有办法通过提供 equals+hash 谓词让 Array.prototype.includes()
也能处理非原始对象?
例如给定一个列表:
var list = [{id:111},{id:222},{id:333}];
console.log(list.includes({id:333});
// output: false
从上面的例子来看,相等性似乎是由对象标识(即内存地址)而不是值来完成的,这当然是完全合理的,也是预期的。但是有没有办法为 list.includes()
提供相等函数,以便使用 id
的原始值来确定相等性?
Arrays.includes() 文档没有提及任何关于接受相等谓词的内容。
Array#includes
有两个参数:
searchElement: The value to search for.
fromIndex (Optional): The position in this array at which to begin searching for searchElement.
您可以使用 Array#some
代替:
const list = [{id:111},{id:222},{id:333}];
console.log( list.some(({id}) => id === 333) );