어레이의 Marge/flatening

다음과 같은 JavaScript 배열이 있습니다.

[["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]] 

개별 내부 어레이를 다음과 같은 어레이로 병합하려면 어떻게 해야 합니까?

["$6", "$12", "$25", ...] 


질문에 대한 답변



사용할 수 있습니다.concat어레이를 Marge하려면:

var arrays = [
["$6"],
["$12"],
["$25"],
["$25"],
["$18"],
["$22"],
["$10"] ]; var merged = [].concat.apply([], arrays);
console.log(merged);

사용방법apply의 방법concat는 두 번째 파라미터를 배열로 받아들이기 때문에 마지막 행은 다음과 같습니다.

var merged2 = [].concat(["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]); 

또한 어레이를 평평하게 하기 위해 사용할 수 있는 메서드(ES2019에서 도입)도 있습니다.단, Node.js 버전에서는 사용할 있지만 Internet Explorer에서는 사용할 수 없습니다.

const arrays = [
["$6"],
["$12"],
["$25"],
["$25"],
["$18"],
["$22"],
["$10"]
]; const merge3 = arrays.flat(1); //The depth level specifying how deep a nested array structure should be flattened. Defaults to 1. console.log(merge3);




여기 새로운 JavaScript 배열 메서드를 사용하여 n차원 배열을 평평하게 만드는 짧은 함수가 있습니다.

function flatten(arr) {
return arr.reduce(function (flat, toFlatten) {
return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
}, []); } 

사용방법:

flatten([[1, 2, 3], [4, 5]]); // [1, 2, 3, 4, 5] flatten([[[1, [1.1]], 2, 3], [4, 5]]); // [1, 1.1, 2, 3, 4, 5] 



원래 배열을 변환하지 않고 새 배열을 구성하는 혼동스러운 방법이 있습니다.

var oldArray = [[1],[2,3],[4]]; var newArray = Array.prototype.concat.apply([], oldArray); console.log(newArray); // [ 1, 2, 3, 4 ]




javascript reduced 기능으로 가장 잘 할 수 있습니다.

var arrays = [["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"], ["$0"], ["$15"],["$3"], ["$75"], ["$5"], ["$100"], ["$7"], ["$3"], ["$75"], ["$5"]];
arrays = arrays.reduce(function(a, b){
return a.concat(b); }, []); 

또는 ES2015의 경우:

arrays = arrays.reduce((a, b) => a.concat(b), []); 

js-discriptions(점수)

Mozilla 문서




이것을 정확하게 하기 위한 플랫이라는 새로운 네이티브 방법이 있습니다.

(2019년 말 기준)flat현재 ECMA 2019 표준에 게재되어 있습니다.core-js@3(babel’s 라이브러리) 폴리필 라이브러리에 포함)

const arr1 = [1, 2, [3, 4]]; arr1.flat();
// [1, 2, 3, 4]
const arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]]
// Flatten 2 levels deep const arr3 = [2, 2, 5, [5, [5, [6]], 7]]; arr3.flat(2); // [2, 2, 5, 5, 5, [6], 7];
// Flatten all levels const arr4 = [2, 2, 5, [5, [5, [6]], 7]]; arr4.flat(Infinity); // [2, 2, 5, 5, 5, 6, 7];