JS 如何优化 解决indexOf undefined的问题
`
for (let index = 0; index < i.infoList.length; index++) {if (i.infoList[index].wordStyle.indexOf("title") > -1) {
this.title.push(i.infoList[index]);
i.infoList.splice(index, 1);
//索引同样递减
index--;
}
}
`
以上循环实现的功能
i.infoList[index]属性wordStyle为title的 push到一个新的数组,并且把该i.infoList数组中 已经push出去的 从原数组删除
现在这个功能是可以实现 但是因为这样写index 运行到最后的时候
可能因为index没了 控制台会报错
求问 这个循环该怎么优化能更好实现这个功能并且不报错
回答
index
没了会报 wordStyle
的错
1 . 懒一点的办法加个try catch
在catch
里 i++
2 . 一级一级判断
const item = i.infoList[index]if(item && item.wordStyle && item.wordStyle.indexOf && item.wordStyle.indexOf("title") > -1) {}
3 . 将2封装成方法
4 . 可选链操作符
if (i.infoList[index]?.wordStyle?.indexOf("title") > -1) {}
另外 for
循环可以用filter
替代
倒过来循环
for (let index = i.infoList.length-1; index >= 0; index--)
如果 this.title
有顺序要求
用 this.title.unshift
替换 this.title.push
将方法改动一下,遍历的时候,不存在值push进数组,存在就push进另外数组
let list = []this.title = this.infoList.reduce((arr, item) => {
if (!arr.includes(item.wordStyle)) {
arr.push(item.wordStyle)
} else {
list.push(item)
}
return arr
}, [])
this.infoList = list
你在循环中操作splice
,导致原数组的长度变更,按初始长度循环的话,因为原数组长度已经变了,必然会遇到循环到后面下标为空的情况。
按你逻辑可以把代码简化成这样
i.infoList = i.infoList.filter((v) => { const push = v.wordStyle.indexOf('title') > -1;
if (push) this.title.push(v);
return !push;
});
以上是 JS 如何优化 解决indexOf undefined的问题 的全部内容, 来源链接: utcz.com/a/38386.html