我正在尝试使用回调函数过滤器中的索引对数组B进行切片时过滤数组A。

const endResult = answers[user].filter((ans, index) => {

    if (ans !== '') {
        return true
    } else {
        console.log(index)
        outsideArray.splice(index, 1)
        return false
    }
})


看来我无法使用filter回调函数内的索引来拼接另一个数组。有没有办法做到这一点?我尝试了诸如map()之类的各种尝试,但都没有成功。

outsideArray: Array [ 1, 2, 4, 5 ]

answer[users]: Array [ "fff", "", "", "fffffff", "", "" ]


最后,我得到:

outsideArray: Array [ 1, 4 ]

answer[users]: Array [ "fff", "fffffff" ]


我应该得到:

outsideArray: Array [ ]

answer[users]: Array [ "fff", "fffffff" ]

最佳答案

您实际上并不想在splice中完全对应的索引。您要删除与outsideArray中的某些索引匹配的值。尝试这个:

outsideArray.splice(outsideArray.indexOf(index), 1)


例如,在过滤器调用的第二次迭代中,我们具有以下内容:


answer[users]index
1outsideArray


现在,如果在索引[ 1, 2, 4, 5 ]处拼接outsideArray,则会得到1。这不是您想要的。您想在值为[ 1, 4, 5 ]的索引处拼接outsideArray。那就是1出现的地方:


indexOf返回outsideArray.indexOf(index)中的第一个索引,其中值等于outsideArray。这是在索引1处。


如果我们在索引0处拼接outsideArray,则会得到所需的内容:0

根据您的用例,肯定有更有效的方法来设计它。当前,您正在[ 2, 4, 5 ]调用的每次迭代中搜索整个outsideArray

09-17 09:37