【问题标题】:Read a value key of a JSON constant in Typescript with Angular使用 Angular 在 Typescript 中读取 JSON 常量的值键
【发布时间】:2022-01-22 05:42:28
【问题描述】:

我正在尝试使用 Angular 在 Typescript 中读取 JSON 常量中的值,但只是为了提高性能,我不知道是否有一种方法可以读取框架中包含的属性(或者它是否存在另一种方式当然要做得更好)。这是我的 JSON 常量值:

    const myConstant= {
    data : [
      {
          key1: "5",
          key2: "extract",
          key3: "unique1"
      },
      {
          key1: "5",
          key2: "extract",
          key3: "unique2"
      },
      {
        key1: "5",
          key2: "extract",
          key3: "unique3"
    }
  ]
  };

此常量已导出到另一个 TS 文件中,仅用于查找 key3 值以在条件中验证此值。

 validateInfo(cod:string){
    for (var i = 0; i < myConstant.data.length; i++){
      var obj = myConstant.data[i];
      for (var key in obj){
        var value = obj[key];
        if (key== "key3"){
          if (value == cod){
            return true;
          }
        }
      }
    }
    return false;
  }

所以我的问题是,有没有一种方法可以在不进行循环的情况下提取“key3”值?喜欢

myConstant.find(data.key3,'unique3');

是什么原因?我试图在前端隐藏一个视图,以防用户不允许使用 JSON 信息(前一个函数为 true 或 false)访问:

<div class="ts-cntnr" *ngIf="allowedInfo" >

【问题讨论】:

    标签: html json angular typescript frontend


    【解决方案1】:

    你可以试试这个代码

      var item= findItem(myConstant.data, "key3","unique3");
    

    功能

    function findItem(items, key,value) {
          const result = items.filter(function(item) {
           for (const property in item)
             if(property==key && item[property]==value) return item;
            });
           return result != undefined ? result[0] : null;
        };
    

    结果

    {
      "key1": "5",
      "key2": "extract",
      "key3": "unique3"
    }
    

    【讨论】:

      【解决方案2】:

      显然有!有很多方法可以满足您的要求,一种更简单的方法是使用some() 检查是否存在至少一个对象,其键名为key3,返回一个布尔结果,这是您想要的输出。

      const myConstant = {
        data: [{
            key1: "5",
            key2: "extract",
            key3: "unique1"
          },
          {
            key1: "5",
            key2: "extract",
            key3: "unique2"
          },
          {
            key1: "5",
            key2: "extract",
            key3: "unique3"
          }
        ]
      };
      
      console.log(myConstant.data.some(subData => Object.keys(subData).includes("key3")))
      
      // UPDATE
      console.log(myConstant.data.some(subData => Object.keys(subData).includes("key3") && subData["key3"] == "unique3"))

      【讨论】:

      • 这是一个很好的代码,但我需要的真正目的是在 JSON 中检查 key3 的值。即,我想比较传入的值(来自“cod”参数)并检查 JSON 中是否存在该代码(验证 unique3 是否在列表中)
      • 啊,仍然不需要更改。只需添加您要求的比较:) 我已经更新了代码。
      • 哦,谢谢,它看起来很棒。但现在我遇到了一个问题,当我尝试编译时,IDE 显示此错误“此条件将始终返回 'false',因为类型 'number' 和 'string' 没有重叠。”在更新的部分。所以我将它划分为一个干净的 JSON。但是当我设置 subData.key3["key3"] 它显示我未定义。我不知道这是 JSON 限制还是我需要做一些额外的事情。
      • 我明白了。我不确定您用于原始数据的接口类型。你可以尝试用这个替换我的代码的更新部分:console.log(myConstant.data.some((subData: { [x: string]: string; }) => Object.keys(subData).includes("key3 ") && subData["key3"] == "unique3"))
      • 试试const myConst: any = getCodes();const myConst: any[] = getCodes();
      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2016-06-12
      • 2019-07-23
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多