如何使用另一个数组过滤一个数组

时间:2019-12-23 16:23:54

标签: javascript arrays

我处于一种需要根据用户生成的另一个数组过滤一个数组的情况。我设法使它适用于用户的单个值,但无法将其扩展到用户的数组。以下是要过滤的数组(“注释”)的示例:

[
{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的运气。

任何建议将不胜感激。

谢谢

3 个答案:

答案 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);