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 catchcatch里 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的问题 的全部内容, 来源链接: www.h5w3.com/38386.html

回到顶部