亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js兩個嵌套的循環如何讓數值正確的刪除

js兩個嵌套的循環如何讓數值正確的刪除

慕慕森 2019-05-22 18:17:55
varpatt=newRegExp(11);vardata=[[{a:1,b:1},{a:2,b:2},{a:3,b:3}],[{a:11,b:11},{a:22,b:22},{a:33,b:33}]]data.forEach((item,index)=>{item.forEach((item2,index2)=>{if(!patt.test(item2.a)){console.log(item2.a);//打印出的結果是1,2,3,22,33(除了11以外的所有項)item.splice(index2,1);//問題出在這一句}})});console.log(data);//我希望這個data能拿到的是{a:11,b:11}這一條數據如上面的代碼所示,我現在希望data打印出的結果是patt篩選的那個結果所在的那條數據{a:11,b:11}該怎么修改這一段代碼,讓它能正確的打印出我想要的結果?
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

item2.splice(index2,1);//item2item是外層的,你要刪除的是內層的。所以是item2**
仔細一看,我應該寫錯了。我再改改
forEach()方法對數組的每個元素執行一次提供的函數。應用場景:為一些相同的元素,綁定事件處理器!
那么forEach看上去不那么適合
filter()方法創建一個新數組,其包含通過所提供函數實現的測試的所有元素。
filter()也不適合,他只有兩個操作,要或者不要,所以最外層的循環他改變不了
map()方法創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。
這個我覺得就還好了,因為他是一個返回值的合集
varpatt=newRegExp(11);
vardata=[
[
{a:1,b:1},
{a:2,b:2},
{a:3,b:3}
],
[
{a:11,b:11},
{a:22,b:22},
{a:33,b:33}
]
]
data=data.map((item,index)=>{
item=item.filter((item2,index2)=>{
console.log(item2)
returnpatt.test(item2.a)
});
returnitem
});
console.log(data);//我希望這個data能拿到的是{a:11,b:11}這一條數據
                            
查看完整回答
反對 回復 2019-05-22
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

splice()方法向/從數組中添加/刪除項目,然后返回被刪除的項目。
該方法會改變原始數組。
varpatt=newRegExp(11);
vardata=[
[
{a:1,b:1},
{a:2,b:2},
{a:3,b:3}
],
[
{a:11,b:11},
{a:22,b:22},
{a:33,b:33}
]
]
data.forEach((item,index)=>{
item.forEach((item2,index2)=>{
if(!patt.test(item2.a)){
console.log(data);
item.splice(index2,1);
}
})
});
看看每次循環打印的data是什么。每次在循環中進行splice操作時,都改變了data,也就是去掉一個item2,那么進行下一次循環的時候,由于少了一項,index2可能就取不到了(數組里只有兩個項,但你想去下表為3的項)。所以造成了這個問題
                            
查看完整回答
反對 回復 2019-05-22
  • 2 回答
  • 0 關注
  • 482 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號