如何根据条件检查 angular 中的键过滤 json 响应中的数组 7

How to get filtered the array in json reponse based on condition check with keys in angular 7

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

{ "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"
     }
]

感谢帮助和回复

您可以使用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);

演示 在此StackBlitz Link

我的解决方案就像下面的代码片段。 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>

请这样尝试。

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