如何删除对象内所有数组中的指定元素'main-1-3'且不影响其他元素
错误原因
当数组中不存在main-1-3元素时,indexOf('main-1-3')会返回-1,而splice方法接收负数作为起始位置时,会从数组末尾倒数对应位置开始删除元素,splice(-1,1)就会直接删掉数组的最后一位,这就是误删的根源。如果是数组为空的场景,这个操作也不会抛出预期外的异常,但会执行无意义的调用。
修复方案
方案1:在原有逻辑上增加存在性判断
先确认目标元素存在再执行删除操作:
const a = { white: ['main-1-1'], red: ['main-1-3'], orange: [], green: [], blue: [], } const colors = ['white', 'red', 'orange', 'green', 'blue']; for(let i = 0; i < colors.length; i++) { const targetIndex = a[colors[i]].indexOf('main-1-3') // 仅当元素存在时执行删除 if(targetIndex !== -1) { a[colors[i]].splice(targetIndex, 1); } } console.log(a)
方案2:用filter方法简化实现(更推荐)
直接过滤掉目标元素,不需要手动判断存在性,逻辑更简洁不易出错:
const a = { white: ['main-1-1'], red: ['main-1-3'], orange: [], green: [], blue: [], } const colors = ['white', 'red', 'orange', 'green', 'blue']; for(let i = 0; i < colors.length; i++) { a[colors[i]] = a[colors[i]].filter(item => item !== 'main-1-3') } console.log(a)
内容的提问来源于stack exchange,提问作者Sara Ree
相关产品推荐
相关产品推荐

