我处于一种需要根据用户生成的另一个数组过滤一个数组的情况。我设法使它适用于用户的单个值,但无法将其扩展到用户的数组。以下是要过滤的数组(“注释”)的示例:
[
{postId: 1, content: "XXX"},
{postId: 2, content: "XXX"},
{postId: 2, content: "XXX"},
{postId: 3, content: "XXX"}
]
然后我从用户那里收到一个输入,该输入将是这样的:
[1,2]
在此示例中,我想要的输出是:
[
{postId: 1, content: "XXX"},
{postId: 2, content: "XXX"},
{postId: 2, content: "XXX"}
]
这是我用来从表单获取用户输入的代码:
function formSubmit() {
const lookupVals = document
.getElementById('post-id-input')
.value.split(',')
.filter(Boolean);
console.log(lookupVals);
filterComments(lookupVals);
}
然后,在提交表单后,我使用下面的函数过滤原始数组:
function filterComments(filterVals) {
try {
console.log(comments.filter(comment => comment.postId == filterVals));
} catch (error) {
console.log(error);
}
}
通过在原始数组“ comments”上使用.filter方法并检查postID是否等于从用户表单中传递的值,我设法使其与一个值一起使用。但是,我正在努力将其扩展为接受多个值,因为它当前可用于数组,但只能包含一个值。
到目前为止,我还没有使用第二个.filter或尝试使用.includes的运气。
任何建议将不胜感激。
谢谢
答案 0 :(得分:2)
您可以尝试使用Array.prototype.includes()
includes()
方法确定数组的条目中是否包含某个值,并根据需要返回true或false。
comments.filter(comment => filterVals.includes(comment.postId))
答案 1 :(得分:1)
您尝试过吗:
comments.filter(comment => filterVals.includes(comment.postId))
答案 2 :(得分:1)
const arr = [
{postId: 1, content: "XXX"},
{postId: 2, content: "XXX"},
{postId: 2, content: "XXX"},
{postId: 3, content: "XXX"}
];
const input = [1,2];
const filtered = arr.filter(i => input.includes(i.postId));
console.log(filtered);