2017-11-30 7 views
-1

自分のequals関数と等しいかどうかをチェックする配列関数(contains、uniqueなど)を使用したいと思います。例えばtypescriptカスタム関数の配列関数

arr.contains({id:1,....}). 

私は見つけられませんでしたで検索してみました:

let arr = [{id:1,..//some more},{id:2,..//some more},{id:3,..//some more}] 

私はこれが唯一のIDを確認するのequals関数を使用して、trueを返しますことをしたいです。

どうすればいいですか?一般的にどのように私の等価関数を(Javaのequals関数のような)typescriptで使うことができますか?

+0

* "私は(含まれているように、ユニークで)配列関数を使用したい" *のJavaScriptの配列型のdoesnこれらの機能のいずれかを持っています(https://tc39.github.io/ecma262/#sec-properties-of-the-array-prototype-object)。それには 'includes'があります(ES2016現在)。 –

+0

*「見つからないことで検索しようとしました...」*本当にですか?たとえば、[配列のMDNページ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)を見つけることはできませんでしたか? 'find'、' forEach'をリストしています... http://idownvotedbecau.se/noresearch/ –

+0

あなたは私の質問を理解できませんでした。関数名は重要ではない、私は配列のすべての機能を知っている。私は私のカスタム等価関数ですべての配列関数を使いたいです。 – user1137582

答えて

0

あなたは、戻り値は未定義

例がないことをfindとテストを使用することができます。

let arr = [{id: 1, test: '1'}, {id: 2, test: '2'}]; 
const customEqual = i => i.id === 1; 
const containsItemWithId1 = arr.find(customEqual) !== undefined; 
2

あなたはincludesまたはindexOfのような配列関数によって使用される等価性チェックを変更することはできません。しかし、他の配列関数を使用すると、代わりにコールバックを使ってみましょう:

  • find - の最初のエントリのインデックスを検索 - あなたのコールバックがtruthy値
  • findIndexを返すために、配列の最初のエントリを検索しますあなたのコールバックが真理値を返す配列
  • some - 真理値を返すまでコールバックを呼び出す配列をループします(この場合、someが停止して戻り、trueを返します)。コールバックが本当の値を返さない場合、somefalseを返します。
  • every - コールバックを呼び出して偽の値を返すまで配列をループします(この場合、everyが停止して戻り、falseを返します)。あなたのコールバックが決して偽の値を返さない場合、everytrueを返します。

これらのすべては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));

+0

*(上記の例で 'find'を使用している場合、リフレッシュしてください。\ * yawn \ *もっと茶が必要です。)* –