使用 Angular 在 Typescript 中读取 JSON 常量的值键

Posted

技术标签:

【中文标题】使用 Angular 在 Typescript 中读取 JSON 常量的值键【英文标题】:Read a value key of a JSON constant in Typescript with Angular 【发布时间】: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" >

【问题讨论】:

【参考方案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();

以上是关于使用 Angular 在 Typescript 中读取 JSON 常量的值键的主要内容,如果未能解决你的问题,请参考以下文章

Typescript - 如何在 Angular2 中正确使用 jsPDF?

在Angular / Typescript中使用整数和字母对数组进行排序

使用 Angular 在 Typescript 中读取 JSON 常量的值键

如何在 TypeScript Angular 中使用外部 Javascript

如何在 Angular 的 Typescript 中使用数组

如何使用 Typescript 在 Angular 2 中使用 Google 实现登录