如何从JSON数据中获取特定的键值,并在angular 6中过滤重复项并推送数组,而不使用for循环?
JSON数据如下所示:如何从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
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))]