2017-12-27 15 views
2

私は現時点で角度2を使用しています。 そして、私はいくつかのデータオブジェクト(json)とモデル(javascriptクラス)の比較方法

data: MyModel[] = [ 
{ 
    id: 1, 
    name: 'Name', 
    secondName: 'SecondName' 
} 

の配列はまた、mymodelというインタフェースですしている:

interface MyModel { 
id: number, 
name: string, 
secondName: string 

は、私はバックエンド(オブジェクトのJSON)からデータを受信したこと、のは、想像してみましょう:

{ 
id: 2, 
FIRSTname: 'FName', 
secondName: 'SecondName' 
} 

オブジェクトのキーが自分のインターフェースと同じであることをどのように検証できますか?

たとえば、フィールド「FIRSTname」が正しくない場合は、例外などをスローする必要があります。 :それは機能の礼儀を比較

Array.prototype.compare = function(testArr) { 
    if (this.length != testArr.length) return false; 
    for (var i = 0; i < testArr.length; i++) { 
     if (this[i].compare) { //To test values in nested arrays 
      if (!this[i].compare(testArr[i])) return false; 
     } 
     else if (this[i] !== testArr[i]) return false; 
    } 
    return true; 
} 
Object.keys(respDataObj).compare(Object.keys(obj)) 

をrespDataObj私はあなたがモデルのインターフェイスを実装objを変数を定義し、そのすべてのプロパティを初期化して、バックエンドのデータをOBJのキーを比較することができると言う場合、名前をすることができます

+1

オブジェクトキーを反復して手動で比較する独自の関数を作成する必要があります。 AFAIK、タイプスクリプトに組み込まれているものを実行する方法がありません –

+0

if(JSON.stringify(data)=== JSON.stringify(dataFromServer))を使ってみましたか? – Tomer

答えて

2

は、たぶん、あなたが行うことができますES6で、typescriptですより良い方法があります

id、name、secondNameのいずれかの値がnullの場合、validateはfalseを返します。

0

const data = [ 
 
    { 
 
    id: 2, 
 
    name: 'FName', 
 
    secondName: 'SecondName' 
 
    }, 
 
    { 
 
    name: 'foo', 
 
    secondName: 'bar' 
 
    }, 
 
]; 
 
const validate = ({id, name, secondName}) => id && name && secondName 
 

 
const validData = data.filter(validate) 
 
console.log(validData);
https://stackoverflow.com/a/6229258/2791802