使用splice删除二维数组子数组仅留空数组如何完全删除
问题原因
你之前调用cid[i].splice(0)操作的是cid数组中的子数组,只会清空该子数组内部的元素,子数组本身仍然作为cid的元素存在,所以会残留空数组项。
解决方法
方案1:遍历直接删除外层数组项(推荐,性能更优)
把循环改为倒序遍历,符合删除条件时直接删除cid数组的对应项,不需要先清空子数组。倒序遍历可以避免删除元素后数组长度变化导致的索引错乱问题:
let available = 0 // 倒序遍历避免索引错乱 for(let i = cid.length - 1; i >= 0; i--) { if(coinsValue[cid[i][0]] < troco && cid[i][1] > 0) { available += cid[i][1] } if(coinsValue[cid[i][0]] > troco) { // 直接删除外层数组第i项,共删除1个元素 cid.splice(i, 1) } }
方案2:循环后过滤空数组
如果不想修改原有循环逻辑,可以在循环结束后用filter方法过滤掉所有空数组项:
// 原有逻辑不变 for(let i = 0; i < cid.length; i++) { if(coinsValue[cid[i][0]] < troco && cid[i][1] > 0) available += cid[i][1] if(coinsValue[cid[i][0]] > troco) cid[i].splice(0) } // 过滤所有长度为0的空数组项 cid = cid.filter(item => item.length > 0)
内容的提问来源于stack exchange,提问作者izzypt
相关产品推荐
相关产品推荐

