我正在尝试使用回调函数过滤器中的索引对数组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
1
是outsideArray
现在,如果在索引
[ 1, 2, 4, 5 ]
处拼接outsideArray
,则会得到1
。这不是您想要的。您想在值为[ 1, 4, 5 ]
的索引处拼接outsideArray
。那就是1
出现的地方:indexOf
返回outsideArray.indexOf(index)
中的第一个索引,其中值等于outsideArray
。这是在索引1
处。如果我们在索引
0
处拼接outsideArray
,则会得到所需的内容:0
。根据您的用例,肯定有更有效的方法来设计它。当前,您正在
[ 2, 4, 5 ]
调用的每次迭代中搜索整个outsideArray
。