我想使用数组函数(比如contains,unique)来检查与我自己的equals函数的相等性。
例如:
let arr = [{id:1,..//some more},{id:2,..//some more},{id:3,..//some more}]
我希望通过使用仅检查id的equals函数返回true:
arr.contains({id:1,....}).
我试图通过没有找到来搜索。
我该怎么办?通常我如何在打字稿中使用我自己的相同函数(如Java中的equals函数)。
答案 0 :(得分:2)
您无法更改includes
或indexOf
等数组函数使用的等式检查。但是其他数组函数允许您使用回调:
find
- 查找数组中您的回调返回真值的第一个条目findIndex
- 查找数组中第一个条目的索引,其回调值为真值some
- 循环调用你的回调数组,直到它返回一个truthy值(在这种情况下some
停止并返回true
);如果您的回调永远不会返回真值,some
会返回false
。every
- 循环调用你的回调数组,直到它返回一个假值(在这种情况下every
停止并返回false
);如果您的回调永远不会返回虚假值,every
会返回true
。所有这些都在MDN array page上以相关的详细说明进行了描述。
例如,"包含"自定义相等的格式为some
:
const a = [
{id: 1},
{id: 2},
{id: 3}
];
console.log("Has 1? " + a.some(e => e.id == 1));
console.log("Has 4? " + a.some(e => e.id == 4));

答案 1 :(得分:0)
您可以使用find并测试返回的值是否未定义
示例:
let arr = [{id: 1, test: '1'}, {id: 2, test: '2'}];
const customEqual = i => i.id === 1;
const containsItemWithId1 = arr.find(customEqual) !== undefined;