Array.prototype.flat()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2020å¹´1æ.
坦驿§è³ª: 鿝ä¸å實é©ä¸çåè½
æ¤åè½å¨æäºç覽å¨å°å¨éç¼ä¸ï¼è«åèå
¼å®¹è¡¨æ ¼ä»¥å¾å°ä¸åç覽å¨ç¨çåè¼ã
flat() 彿¸ä»¥éè¿´æ¹å¼å°ç¹å®æ·±åº¦çåé£åéæ°ä¸²æ¥æçºä¸æ°çé£å
å試ä¸ä¸
const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());
// expected output: Array [0, 1, 2, 3, 4]
const arr2 = [0, 1, [2, [3, [4, 5]]]];
console.log(arr2.flat());
// expected output: Array [0, 1, 2, Array [3, Array [4, 5]]]
console.log(arr2.flat(2));
// expected output: Array [0, 1, 2, 3, Array [4, 5]]
console.log(arr2.flat(Infinity));
// expected output: Array [0, 1, 2, 3, 4, 5]
èªæ³
js
var newArray = arr.flat([depth]);
忏
depth鏿æ§-
æå®å·¢çé£åå±éçæ·±åº¦ãé è¨çº 1ã
åå³å¼
彿¸å°æåå³ä¸åç±åå é£åçåé£å串æ¥èæçæ°é£åã
ç¯ä¾
>å±éå·¢çé£å
js
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
ç¶éé空å ç´ æ
flat() 彿¸æèªåæ¸
é¤é£åä¸ç©ºçå
ç´
js
var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]
æ¿ä»£æ¹æ¡
>reduce è concat
js
var arr1 = [1, 2, [3, 4]];
arr1.flat();
//å±éå®å±¤é£å
arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4]
js
//欲å±éæ´æ·±å±¤çå·¢ççµæ§è«ä½¿ç¨reduceèconcatçéè¿´
function flattenDeep(arr1) {
return arr1.reduce(
(acc, val) =>
Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val),
[],
);
}
flattenDeep(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
js
//使ç¨stackä¾å¯¦ä½ééè¿´çå±é
var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
function flatten(input) {
const stack = [...input];
const res = [];
while (stack.length) {
// pop value from stack
const next = stack.pop();
if (Array.isArray(next)) {
// push back array items, won't modify the original input
stack.push(...next);
} else {
res.push(next);
}
}
//reverse to restore input order
return res.reverse();
}
flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
js
// éå½çæ¬çååµå¥
function flatten(array) {
var flattend = [];
(function flat(array) {
array.forEach(function (el) {
if (Array.isArray(el)) flat(el);
else flattend.push(el);
});
})(array);
return flattend;
}
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.flat> |