In diesem Artikel erfahren Sie, was JS-Array-Flattening ist. Die Implementierung der js-Array-Abflachung (mit Code) hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.
1. Was ist Array-Flattening?
Flattening dient, wie der Name schon sagt, der Reduzierung der Komplexität Dekoration und Dinge herstellen Es ist prägnanter und einfacher und hebt das Thema hervor.
Array-Flattening besteht, wie Sie oben bereits wissen, darin, ein komplex verschachteltes mehrschichtiges Array Schicht für Schicht in ein Array mit weniger Ebenen oder nur einem Array von Ebenen umzuwandeln.
Ps: flatten
kann das Array reduzieren, der Effekt wird wie folgt sein:
const arr = [1, [2, [3, 4]]]; console.log(flatten(arr)); // [1, 2, 3, 4]
Wie man nach der Verwendung von flatten sehen kann Verarbeitung Das Array hat nur eine Ebene. Versuchen wir, es zu implementieren.
2. Einfache Implementierung
2.1 Gewöhnliche Rekursion
Dies Es ist die einfachste Methode, die man sich vorstellen kann, einfach und klar!
/* ES6 */ const flatten = (arr) => { let result = []; arr.forEach((item, i, arr) => { if (Array.isArray(item)) { result = result.concat(flatten(item)); } else { result.push(arr[i]) } }) return result; }; const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
/* ES5 */ function flatten(arr) { var result = []; for (var i = 0, len = arr.length; i < len; i++) { if (Array.isArray(arr[i])) { result = result.concat(flatten(arr[i])) } else { result.push(arr[i]) } } return result; } const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
2.2 toString()
Diese Methode verwendet toString
, um das Array in einen durch Kommas getrennten String umzuwandeln , durchlaufen Sie dann das Array und konvertieren Sie jedes Element wieder in seinen ursprünglichen Typ.
Sehen wir uns zunächst an, wie toString
ein Array in einen String umwandelt
[1, [2, 3, [4]]].toString() // "1,2,3,4"
Vollständige Anzeige
/* ES6 */ const flatten = (arr) => arr.toString().split(',').map((item) => +item); const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
/* ES5 */ function flatten(arr) { return arr.toString().split(',').map(function(item){ return +item; }); } const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
Diese Methode wird verwendet Das Szenario ist sehr begrenzt, und alle Elemente im Array müssen Zahl sein.
Es können auch alle Strings sein, und Sie können die spezifische Implementierung selbst realisieren.
2.3 [].concat.apply + some
Verwenden Sie arr.some
, um festzustellen, ob ein Array im Array vorhanden ist, und rufen Sie es auf Flat-Funktion (unter Verwendung von flatten
Flattening), verbunden mit [].concat.apply
, gibt schließlich concat
;arr
/* ES6 */ const flatten = (arr) => { while (arr.some(item => Array.isArray(item))){ arr = [].concat.apply([], arr); } return arr; } const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
2.4 Reduce
reduce
/* ES5 */ /** * 封装Array.some * @param {function} callback - 回调函数 * @param {any} currentThis - 回调函数中this指向 */ Array.prototype.some = function (callback, currentThis){ let context = this; let flag = false; currentThis = currentThis || this; for (var i = 0, len = context.length; i < len; i++) { const res = callback.call(currentThis, context[i], i, context); if (res) { flag = true; } else if (!flag) { flag = false; } } return flag; } function flatten(arr){ while(arr.some(item => Array.isArray(item))){ arr = [].concat.apply([], arr); } return arr; } const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
wird ...
einmal abgeflacht. [].concat
arr
function flatten(arr){ return arr.reduce(function(prev, cur){ return prev.concat(Array.isArray(cur) ? flatten(cur) : cur) }, []) } const arr = [1, [2, [3, 4]]]; console.log(flatten(arr));
Das obige ist der detaillierte Inhalt vonWas ist JS-Array-Flattening? Implementierung der JS-Array-Flattening (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!