【发布时间】:2020-09-22 11:10:44
【问题描述】:
我有一个名为items 的数组,这里是数组内的数据样本:
[
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"attempted"
},
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"waiting"
},
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"completed"
},
{
"id":"123",
"key":"xxx222@gmail.com",
"status":"completed"
},
{
"id":"456",
"key":"xxx333@gmail.com",
"status":"waiting"
},
{
"id":"456",
"key":"xxx444@gmail.com",
"status":"attempted"
},
{
"id":"456",
"key":"xxx444@gmail.com",
"status":"failed"
},
{
"id":"456",
"key":"xxx555@gmail.com",
"status":"attempted"
},
{
"id":"456",
"key":"xxx555@gmail.com",
"status":"waiting"
}
]
我想对数组中的项目进行分组和过滤。我发现我可以创建第二个数组并将所有符合我的条件的项目推送到第二个数组中,但不确定如何实现这一点。
以下是分组和过滤的标准:
- 按
id和key分组,以便将具有相同id和key的所有记录分组在一起,并可以在下一步中进行过滤。所以在这里我可以动态创建数组,它们看起来像这样:
数组 1:
[
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"attempted"
},
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"waiting"
},
{
"id":"123",
"key":"xxx111@gmail.com",
"status":"completed"
}
]
数组 2:
[
{
"id":"123",
"key":"xxx222@gmail.com",
"status":"completed"
}
]
数组 3:
[
{
"id":"456",
"key":"xxx333@gmail.com",
"status":"waiting"
}
]
数组 4:
[
{
"id":"456",
"key":"xxx444@gmail.com",
"status":"attempted"
},
{
"id":"456",
"key":"xxx444@gmail.com",
"status":"failed"
}
]
数组 5:
[
{
"id":"456",
"key":"xxx555@gmail.com",
"status":"attempted"
},
{
"id":"456",
"key":"xxx555@gmail.com",
"status":"waiting"
}
]
- 上面的数组应该被
status过滤:如果在数组中我有failed或completed的状态,我不想再考虑这个数组了。符合条件的数组中的数据可以推送到我的最终数组中,我只需要id和key归档,我不需要查看不同的状态:
最终数组:
[
{
"id":"456",
"key":"xxx333@gmail.com"
},
{
"id":"456",
"key":"xxx555@gmail.com"
}
]
到目前为止,我已经尝试过了,但我无法得到想要的结果:
if(items.length >= 1) {
for (i = 0; i < items.length; i++) {
key = items[i]["key"];
status = items[i]["status"];
id = items[i]["id"];
var arr=[];
if(items[i]["key"]==key && items[i]["id"]==id) {
arr.push(items[i]["key"])
arr.push(items[i]["id"])
}
}
任何帮助将不胜感激。
【问题讨论】:
-
array3呢? -
检查此答案以对数组进行分组:stackoverflow.com/questions/30893667/…
-
基本上我的最终数组由数组 3 和 5 组成,因为它们具有正确的状态