如何根据使用角度 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 响应中的数组的主要内容,如果未能解决你的问题,请参考以下文章