使用自定义对象等于的typescript数组函数

时间:2017-11-30 08:42:35

标签: javascript arrays typescript

我想使用数组函数(比如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函数)。

2 个答案:

答案 0 :(得分:2)

您无法更改includesindexOf等数组函数使用的等式检查。但是其他数组函数允许您使用回调:

  • 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;