[javascript] 배열에서 배열을 만드는 방법 [closed]
저는 JavaScript 초보자이며 하나의 기본 배열에서 값을 가진 두 개의 다른 배열을 만들려고합니다.
내 주요 배열은 다음과 같습니다.
0: Array(3) [ 2011, 127072.7, 51584 ]
1: Array(3) [ 2012, 125920.3, 59974 ]
2: Array(3) [ 2013, 129305.4, 15468 ]
3: Array(3) [ 2014, 135364, 84554 ]
4: Array(3) [ 2015, 136757, 98754 ]
5: Array(3) [ 2016, 155653.5, 155548 ]
6: Array(3) [ 2017, 164130.5, 284848 ]
그리고 먼저 다음과 같이 두 개의 배열을 만들어야합니다.
0: Array(2) [ 2011, 127072.7]
1: Array(2) [ 2012, 125920.3]
2: Array(2) [ 2013, 129305.4]
3: Array(2) [ 2014, 135364]
4: Array(2) [ 2015, 136757]
5: Array(2) [ 2016, 155653.5]
6: Array(2) [ 2017, 164130.5]
(제 1 값 및 제 2 값)
두 번째는 다음과 같습니다.
0: Array(2) [ 2011, 51584]
1: Array(2) [ 2012, 59974]
2: Array(2) [ 2013, 15468]
3: Array(2) [ 2014, 84554]
4: Array(2) [ 2015, 98754]
5: Array(2) [ 2016, 155548]
6: Array(2) [ 2017, 284848]
(제 1 및 제 3 가치)
스플 라이스, 필터 등을 시도했지만 시작 방법을 모르겠습니다.
나에게 정확한 해결책을 쓸 필요는 없지만 그것을 수행하는 단계 만 있습니다.
답변
동적 접근 방식을 사용하여 각 새 배열의 키 값 다음에 배열의 모든 항목을 가져올 수 있습니다.
var data = [[2011, 127072.7, 51584], [2012, 125920.3, 59974], [2013, 129305.4, 15468], [2014, 135364, 84554], [2015, 136757, 98754], [2016, 155653.5, 155548], [2017, 164130.5, 284848]],
[first, second] = data.reduce(
(r, [k, ...a]) => {
a.forEach((v, i) => r[i].push([k, v]));
return r;
},
Array.from({ length: Array.isArray(data[0]) ? data[0].length - 1 : 0 }, () => [])
);
console.log(first);
console.log(second);
.as-console-wrapper { max-height: 100% !important; top: 0; }
답변
당신이 사용할 수있는 .map()
데이터를 반복하는 일부 사용 배열 Destructuring을 원하는 출력을 얻을 :
const data = [
[ 2011, 127072.7, 51584 ],
[ 2012, 125920.3, 59974 ],
[ 2013, 129305.4, 15468 ],
[ 2014, 135364, 84554 ],
[ 2015, 136757, 98754 ],
[ 2016, 155653.5, 155548 ],
[ 2017, 164130.5, 284848 ]
];
const arr1 = data.map(([year, val]) => ([year, val]));
const arr2 = data.map(([year, _, val]) => ([year, val]));
console.log(arr1);
console.log(arr2);
.as-console-wrapper { max-height: 100% !important; top: 0; }
답변
당신이 사용할 수있는 Array.prototype.forEach
다음 새 항목을 만들고 새로운 배열로 밀어, 원래 배열의 항목을 반복 :
var original = [[ 2011, 127072.7, 51584 ], [ 2012, 125920.3, 59974 ], [ 2013, 129305.4, 15468 ]]
var array1 = []
var array2 = []
original.forEach(item => {
array1.push([item[0], item[1]]);
array2.push([item[0], item[2]]);
});
console.log(array1);
console.log(array2);
산출:
배열이 동적으로 생성되므로 원래 배열의 항목 수에 관계없이 솔루션이 작동합니다.
var original = [
[2011, 127072.7, 51584, 1, 2, 3],
[2012, 125920.3, 59974, 4, 5, 6],
[2013, 129305.4, 15468, 7, 8, 9]
]
// Array of arrays
var myArray = []
// Fill it with empty arrays
for (var i = 0; i < original[0].length - 1; i++)
myArray.push([])
// Iterate over original
// For each original, insert the first and i-th element into our array of arrays
original.forEach(item => {
for (var i = 1; i < item.length; i++) {
myArray[i - 1].push([item[0], item[i]]);
}
});
console.log(myArray);
답변
우선, 처음에는 배열 배열이 있습니다. 당신은 수있는 map
두 개의 서로 다른 배열이 배열을 사용하여 destructuring
간결한 방식에서 하위 어레이에서 각 값을 얻을 :
const data = [
[ 2011, 127072.7, 51584 ],
[ 2012, 125920.3, 59974 ],
[ 2013, 129305.4, 15468 ],
[ 2014, 135364, 84554 ],
[ 2015, 136757, 98754 ],
[ 2016, 155653.5, 155548 ],
[ 2017, 164130.5, 284848 ],
];
const array1 = data.map(([first, second, third]) => [first, second]);
const array2 = data.map(([first, second, third]) => [first, third]);
console.log(JSON.stringify(array1));
console.log(JSON.stringify(array2));
답변
기본 배열을 반복하고 고정 인덱스 값을 사용하여 새 배열을 반환하여 자식 배열 값에 액세스하십시오.
const multiDimArr = [
[2011, 127072.7, 51584],
[2012, 125920.3, 59974],
[2013, 129305.4, 15468],
[2014, 135364, 84554],
[2015, 136757, 98754],
[2016, 155653.5, 155548],
[2017, 164130.5, 284848],
]
const arr1= multiDimArr.map(x=>[x[0],x[1]]);
const arr2= multiDimArr.map(x=>[x[0],x[2]]);
console.log(arr1)
console.log(arr2)
답변
다음과 같이 reduce 함수를 한 번만 반복하여 사용할 수 있습니다.
let matrix = [[ 2011, 127072.7, 51584 ],[ 2012, 125920.3, 59974 ],[ 2013, 129305.4, 15468 ],[ 2014, 135364, 84554 ],[ 2015, 136757, 98754 ],[ 2016, 155653.5, 155548 ],[ 2017, 164130.5, 284848 ]];
let result = matrix.reduce((a, [year, k, v]) => {
a.second.push([year, k]);
a.third.push([year, v]);
return a;
}, {second: [], third: []});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
답변
여기 요
let values = [[ 2011, 127072.7, 51584 ],[ 2012, 125920.3, 59974 ],[ 2013, 129305.4, 15468 ],[ 2014, 135364, 84554 ],[ 2015, 136757, 98754 ],[ 2016, 155653.5, 155548 ],[ 2017, 164130.5, 284848 ]];
let chunk1 = values.map(arr1 => {
return [arr1[0], arr1[1]]
});
let chunk2 = values.map(arr1 => {
return [arr1[0], arr1[2]]
})
console.log("Chunk 1", chunk1);
console.log("Chunk 2", chunk2);