【发布时间】:2021-07-07 21:23:21
【问题描述】:
我的 javascript 数组
const response = [
{
"userId": "1",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "1",
"questionId": "2",
"answeredIndex": 0
},
{
"userId": "2",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "2",
"questionId": "2",
"answeredIndex": 0
},
{
"userId": "3",
"questionId": "1",
"answeredIndex": 0
},
{
"userId": "3",
"questionId": "2",
"answeredIndex": 3
},
{
"userId": "4",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "4",
"questionId": "2",
"answeredIndex": 0
},
{
"userId": "5",
"questionId": "1",
"answeredIndex": 0
},
{
"userId": "5",
"questionId": "2",
"answeredIndex": 0
}]
我正在寻找一个返回用户 ID 数组的解决方案。每个用户都回答了两个问题(questionId: 1 和 questionId: 2)。我希望回答这两个问题的用户相同。所以,我想用 AND 条件过滤我的数组,如下所示:
如果用户为 questionId: 1 选择了 answersIndex: 1 并且如果同一用户也为 questionId: 2 选择了 answersIndex: 0 那么,我希望这个用户被推送到结果数组中。
我尝试了下面的代码,但不幸的是它不起作用。
const targetUsers: string[] = [];
response.forEach((feedback) => {
if ((feedback.questionId === '1' && feedback.answeredIndex === 1) ||
feedback.questionId === '2' && feedback.answeredIndex === 0) {
targetUsers.push(feedback.userId);
}
});
console.log([...new Set(targetUsers)]);
我的预期输出应该如下所示:
[
{
"userId": "1",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "1",
"questionId": "2",
"answeredIndex": 0
},
{
"userId": "2",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "2",
"questionId": "2",
"answeredIndex": 0
},
{
"userId": "4",
"questionId": "1",
"answeredIndex": 1
},
{
"userId": "4",
"questionId": "2",
"answeredIndex": 0
}]
因此,对于每个用户,属性对(questionId、answeredIndex)的组合应该是 (1,1) AND (2,0),然后才会考虑该用户。如果有人在这里帮助我,将不胜感激。提前致谢。
【问题讨论】:
-
为什么有不同类型的ID?通过使用数值,您可以为所有 ID 使用数值,但不会刺激混合类型。
标签: javascript arrays object filter