【问题标题】:How to compare object (json) with Model(javascript class)如何将对象(json)与模型(javascript类)进行比较
【发布时间】:2017-12-27 09:27:49
【问题描述】:

我目前正在使用 Angular 2。 我有一些数据数组

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

MyModel 也是接口:

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

让我们想象一下,我从 Back-End(object json) 收到数据:

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

我如何验证对象中的键是否等于我的接口?

例如字段“FIRSTname”不正确,那么我应该抛出异常或其他东西。

【问题讨论】:

  • 您必须构建自己的函数,通过迭代对象键来手动比较它们。 AFAIK,没有办法做你想要的内置在打字稿中
  • 您是否尝试过使用 if(JSON.stringify(data) === JSON.stringify(dataFromServer) )?

标签: javascript json angular typescript


【解决方案1】:

也许打字稿中有更好的方法,在 es6 中你可以这样做:

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

请注意,如果以下值之一:id、name、secondName 为 null,则验证将返回 false。

【讨论】:

    【解决方案2】:

    如果我说你可以定义一个变量 obj 来实现模型接口并初始化它的所有属性,然后将 obj 的键与后端数据进行比较,让它命名为 respDataObj

    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))
    

    比较功能礼貌:https://stackoverflow.com/a/6229258/2791802

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多