在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 怎么理解[].concat(...arr),單獨(dú)...arr報(bào)錯(cuò)

怎么理解[].concat(...arr),單獨(dú)...arr報(bào)錯(cuò)

背景:
多維數(shù)組展開
問(wèn)題:

var arr = [1,2,[3,4,[5,6,[7,8],9],10]];
function fn(arr){
    return [].concat(arr.map(d=> Array.isArray(d)?fn(d):d))//(3)?[1, 2, Array(4)]
//  return [].concat(...arr.map(a=> Array.isArray(a)? fn(a):a))//(10)?[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

第一種寫法有什么問(wèn)題嗎?為什么結(jié)果不理想
第二種方法應(yīng)該怎么斷句

回答
編輯回答
傻叼
  1. fn返回的是一個(gè)數(shù)組,所以結(jié)果肯定是一個(gè)多維數(shù)組
  2. concat只能接受數(shù)組作為參數(shù),"..."運(yùn)算之后就不是數(shù)組了。
const flatten = (arr, depth = 1) =>
 arr.reduce((a, v) => a.concat(depth > 1 && Array.isArray(v) ? flatten(v, depth - 1) : v), > []);

來(lái)源:flatten

2017年10月19日 02:41
編輯回答
練命

... 后跟數(shù)組, 也就是 arr.map 的結(jié)果

2017年9月13日 08:25
編輯回答
孤毒

...擴(kuò)展運(yùn)算 1 2?[3, 4, Array(4), 10]
依次map
教你個(gè)簡(jiǎn)單的辦法 代碼執(zhí)行打斷點(diǎn) 一步一步走就清晰了

2017年8月5日 05:55
編輯回答
有你在

兩種的區(qū)別就在于...的使用。
第一種,。arr[0],arr[1]就不說(shuō)了,arr[2]是數(shù)組會(huì)再次執(zhí)行fn, 不管結(jié)果是什么,return語(yǔ)句返回的都是數(shù)組,所以返回結(jié)果中arr[2]肯定就是數(shù)組了,再遞歸下去是一樣的道理。
第二種,arr[2]執(zhí)行的返回結(jié)果是一個(gè)數(shù)組,但是由于前面有函數(shù)參數(shù)展開符,會(huì)將arr[2]執(zhí)行的結(jié)果數(shù)組展開傳給concat進(jìn)行連接,后面遞歸一樣的原理

2018年6月5日 06:24
編輯回答
溫衫

你這第一個(gè)寫法 沒(méi)啥用啊
arr = [1,[3]]簡(jiǎn)化

[].concat([1,[3]].map(d=> Array.isArray(d)? [].concat([3].map(a=>a)):d))

//[3].map(d=>d) 返回原數(shù)組 沒(méi)啥用 [].concat([3]) == [3]
//所以[1,[3]].map(d=> d)

[].concat([1,[3]].map(d=> d))

[].concat([1,[3]])

[1,[3]]
2018年9月19日 16:11