如何从JSON数据中获取特定的键值,并在angular 6中过滤重复项并推送数组,而不使用for循环?

如何从JSON数据中获取特定的键值,并在angular 6中过滤重复项并推送数组,而不使用for循环?,angular,Angular,JSON数据如下所示: data = [ { position: 'Active', name: 'name1', email: 'mail1@mail.com', status: 'Yes' }, { position: 'Pending', name: 'name2', email: 'mail2@mail.com', status: 'No' }, { position: 'Issued', name: 'name3', email: 'mail3@ma

JSON数据如下所示:

data = [
      { position: 'Active', name: 'name1', email: 'mail1@mail.com', status: 'Yes' },
      { position: 'Pending', name: 'name2', email: 'mail2@mail.com', status: 'No' },
      { position: 'Issued', name: 'name3', email: 'mail3@mail.com', status: 'Yes' },
      { position: 'Active', name: 'name4', email: 'mail4@mail.com', status: 'No' },
      { position: 'Pending', name: 'name5', email: 'mail5@mail.com', status: 'Yes' },
      { position: 'Pending', name: 'name6', email: 'mail6@mail.com', status: 'No' },
      { position: 'Active', name: 'name7', email: 'mail7@mail.com', status: 'Yes' },
      { position: 'Pending', name: 'name8', email: 'mail8@mail.com', status: 'No' },
      { position: 'Issued', name: 'name9', email: 'mail9@mail.com', status: 'Yes' },
      { position: 'Active', name: 'name10', email: 'mail10@mail.com', status: 'No' },
    ];
我想把“位置”状态推到一个数组中

例如:

status = ['Active', 'Pending', 'Issued']
如何在没有for循环的情况下实现这一点

谢谢

你可以通过

   status = data.map((t) => { return t.position });

正如您特别要求的,没有for循环的解决方案,但我希望这样做:

result: any = [];

for (var i = 0; i < this.data.length; i++) {
   var index = this.result.indexOf(this.data[i].position);
   if (index == -1) {
       this.result.push(this.data[i].position);
   }
}
编写一个函数:

getUnique(value, index, self) {
  return self.indexOf(value) === index;
}
结果:

["Active","Pending","Issued"]

基本上你会这么做

const status = data.reduce((acc, curr) => {
  return acc.find(item => item === curr.position) 
   ? acc
   : [...acc, curr.position]
}, []);

您可以使用
Set
从数组中获取唯一值
使用
Array.map
函数获取唯一的位置数组。
最后,将
Set
转换为
Array
,使用扩展运算符as
[…yourSet]

   [...new Set(this.data.map(e=>e.position))]

更新了带有forloop和不带forloop的答案forloop@imjayabal请参阅一行程序解决方案。更新代码时,我在“Type'Set'不是数组类型或字符串类型”中遇到错误。请使用编译器选项“--downlevelIteration”来允许迭代器的迭代。”。所以我修改如下[…Array.from(newset(data.map(res=>res.Status))])。正在工作fine@imjayabal请把答案也投上一票。谢谢。
编译器选项--downlevelIteration'
是一个新的学习,谢谢分享。
   [...new Set(this.data.map(e=>e.position))]