如何根据使用角度 7 中的键的条件检查来过滤 json 响应中的数组

Posted

技术标签:

【中文标题】如何根据使用角度 7 中的键的条件检查来过滤 json 响应中的数组【英文标题】:How to get filtered the array in json reponse based on condition check with keys in angular 7 【发布时间】:2020-07-26 21:57:57 【问题描述】:

当 dataID 与使用 Angular 7 中的打字稿功能的同一 json 响应中的另一个数组中的 ParentDataID 不匹配时,我想从 json 响应中单独过滤特定数组

 "data":[
    
       "dataId":"Atlanta",
       "parentDataId":"America"
    ,
    
       "dataId":"Newyork",
       "parentDataId":"America"
    ,
    
       "dataId":"Georgia",
       "parentDataId":"Atlanta"
    ,
    
       "dataId":"South",
       "parentDataId":"Atlanta"
    ,
    
       "dataId":"North",
       "parentDataId":"South"
    
   ]


在上述响应中,dataId Newyork 的值与 parentDataId 整个数组 json 响应中的任何一个都不匹配。所以现在我只想过滤掉第二个 DataID 数组来制作新数组。

我想在 Typescript angular 7 中进行此验证

我的输出应该如下所示... DataId 没有 parentDataId

[
  
    "dataId":"Newyork",
    "parentDataId":"America"
  ,
  
     "dataId":"Georgia",
     "parentDataId":"Atlanta"
   ,
   
      "dataId":"North",
      "parentDataId":"South"
     
]

感谢帮助和响应

【问题讨论】:

您的问题不够详细,无法为您提供准确的解决方案。您仍在寻找Array.filter()Array.some() 方法。如果您不熟悉这些文档,请查看文档。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 在你的样本数据结果输出中是dataId = Newyork,georgea,north是你想要的三个记录吗? 我的意图是当 dataId 在整个 JSON 响应中没有 parentId 时获取数组。 GaurangDhorda sn-p 工作正常,但它不会向后看响应。 GaurangDhorda 你能帮我吗?感谢您的回复。 【参考方案1】:

demo在这个StackBlitz Link

我的解决方案类似于下面的代码 sn-p。 ts

reducedData = [...this.data];

this.data.reduce((c,n,i) => 
   this.data.reduce((d,o, inex) =>   
      if ( n.dataId === o.parentDataId) 
           this.reducedData.splice(i,1, 'dataId': 'removed', parentDataId: 'true'); 
       else 
         return o;
      
    ,);
   return n;
, );   

this.reducedData = this.reducedData.filter (value => value.dataId !== 'removed');

html 文件

<h4> dataId does not have parentId </h4>
<hr>
<pre>
  reducedData | json
</pre>

编辑

如果你不想想使用第二个对象reducedData,那么下面的解决方案就可以了。StackBlitz Link

component.ts

this.data.reduce((c,n,i) => 
    this.data.reduce((d,o, inex) =>   
      if ( n.dataId === o.parentDataId) 
      this.data[i]['removed'] = "removed";
       else
        return o;
      
    ,);
   return n;
, );

this.data = this.data.filter (value => value['removed'] !== 'removed');

component.html

<h4> dataId does not have parentId </h4>
<hr>
<pre>
 data |json
</pre>

【讨论】:

您好 Gaurang,感谢您的回复。它工作正常,但是当 dataId 保存在 JSON 响应中首先出现的 parentDataID 的值时会失败......在这种情况下,它没有减少它并且它跳过了。当像下面这样的 JSON 响应出现时。 "dataId":"Georgia", "parentDataId":"Newyork" , "dataId":"Newyork", "parentDataId":"Georgia" , ******* 当 ParentDataId 值为 "Newyork"首先出现,然后跟随数组 dataId calue 是“Newyork”,代码没有减少它。你能在这里帮我吗...欣赏 - @user3175778 我已经更新了我的答案...结帐更新的答案。 嗨 Gaurang,我可以提供更新的 slackBlitz 链接以进行修复吗?提供的,我找不到。谢谢。 @user3175778 stackblitz.com/edit/… 这里是更新的 stackblitz 链接。因为相同的链接也在答案中更新。 @user3175778 请upvote answer。现在你可以投票回答,因为我已经投票了问题并且你现在需要投票的声誉。【参考方案2】:

请这样尝试。

const data =  "data":[
    
       "dataId":"Atlanta",
       "parentDataId":"America"
    ,
    
       "dataId":"Newyork",
       "parentDataId":"America"
    ,
    
       "dataId":"Georgia",
       "parentDataId":"Atlanta"
    
   ]
;

const filterKey = "Newyork"
const matchExist = data.data.some( item => item.parentDataId ===  filterKey && item.dataId === filterKey)
let filteredArray ;
if(!matchExist)
    filteredArray = data.data.find(item => item.dataId === filterKey )

【讨论】:

【参考方案3】:

你可以使用filter方法:

let filterKey = 'Atlanta';
const result = data.data.filter(f=> f.parentDataId != filterKey
   && f.dataId != filterKey);

一个例子:

let data =  "data":[
    
       "dataId":"Atlanta",
       "parentDataId":"America"
    ,
    
       "dataId":"Newyork",
       "parentDataId":"America"
    ,
    
       "dataId":"Georgia",
       "parentDataId":"Atlanta"
    
   ]
;

let filterKey = 'Atlanta';
const result = data.data.filter(f=> f.parentDataId != filterKey
    && f.dataId != filterKey);
console.log(result);

【讨论】:

您好,感谢您的回复。我需要正好相反。我刚刚更新了我的问题,请你帮我解决一下。感谢和赞赏 @user3175778 Atlanta 已映射到 parentDataID,因此不应响应。我的回答应该是因为 dattaId "Newyork" 和 "Georgia" 的 valueid 不存在于任何 parentDataID 值中......对。 ? [ "dataId":"Newyork", "parentDataId":"America" , "dataId": "Georgia", "parentDataId": "Atlanta" ]

以上是关于如何根据使用角度 7 中的键的条件检查来过滤 json 响应中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在胶合时分离(带有空格)字符串,使用数组中的键来检查它是否粘合?

根据对象中键的名称过滤对象数组[重复]

如何根据角度 7 中的某些值默认检查特定复选框

如何使用 lodash 过滤对象的键?

SQL系列—— 过滤(where)

Java中的Hashtable如何根据值获取键?