3 回答

TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊
forEach() 方法對數(shù)組的每個元素執(zhí)行一次提供的函數(shù)。
應(yīng)用場景:為一些相同的元素,綁定事件處理器!
那么forEach看上去不那么適合
filter() 方法創(chuàng)建一個新數(shù)組, 其包含通過所提供函數(shù)實現(xiàn)的測試的所有元素。
filter()也不適合,他只有兩個操作,要或者不要,所以最外層的循環(huán)他改變不了
map() 方法創(chuàng)建一個新數(shù)組,其結(jié)果是該數(shù)組中的每個元素都調(diào)用一個提供的函數(shù)后返回的結(jié)果。
這個我覺得就還好了,因為他是一個返回值的合集
var patt = new RegExp(11);
var data = [
[
{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)
return patt.test(item2.a)
});
return item
});
console.log(data); //我希望這個data能拿到的是{a:11,b:11}這一條數(shù)據(jù)

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊
splice() 方法向/從數(shù)組中添加/刪除項目,然后返回被刪除的項目。
該方法會改變原始數(shù)組。
var patt = new RegExp(11);
var data = [
[
{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);
}
})
});
看看每次循環(huán)打印的data是什么。
每次在循環(huán)中進(jìn)行splice操作時,都改變了data,也就是去掉一個item2,那么進(jìn)行下一次循環(huán)的時候,由于少了一項,index2可能就取不到了(數(shù)組里只有兩個項,但你想去下表為3的項)。所以造成了這個問題

TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
換個思路唄
不改變原數(shù)組
Array.prototype.concat.apply(data).map(item => patt.test(item.a))
添加回答
舉報