有個二維陣列資料如下:
每個長度為 3,需要轉換長度為 2 和 4,並且如果長度不足,則捨棄該筆資料。
範例輸出:
硬解:
假設在腦袋一片空白,什麼內建函式都想不到的情況下,就算用最爛的方式也要想辦法解出來。雖然可能很慢很粗糙,但是至少你沒有放棄,至少寫得出來,畢竟如果什麼程式碼都沒寫,在考官心裡的分數很可能就是負的,可能也不會讓你寫下一題。
想辦法寫完之後,再慢慢想可以調整的部分。例如要將二維陣列拆開來的方式有很多種,這裡先示範使用三個點的語法糖將陣列拆開,再自訂函式方便複用,避免 2 個的和 4 個的都要寫一次
解法:
另外要展平二維陣列也可以使用下面的方式一行解決:
參考資料:
完整 JavaScript 陣列 Array 詳細教學和範例
let input = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
每個長度為 3,需要轉換長度為 2 和 4,並且如果長度不足,則捨棄該筆資料。
範例輸出:
let ans2 = [[1, 2], [3, 4], [5, 6], [7, 8]];
let ans4 = [[1, 2, 3, 4], [5, 6, 7, 8]];
硬解:
假設在腦袋一片空白,什麼內建函式都想不到的情況下,就算用最爛的方式也要想辦法解出來。雖然可能很慢很粗糙,但是至少你沒有放棄,至少寫得出來,畢竟如果什麼程式碼都沒寫,在考官心裡的分數很可能就是負的,可能也不會讓你寫下一題。
let input = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let list = [];
for (let i = 0; i < input.length; i++) {
for (let j = 0; j < input[i].length; j++) {
list.push(input[i][j]);
}
}
console.log(list); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
let ans = [];
for (let i = 0; i < list.length; i++) {
if (i % 2 === 0) {
ans.push([list[i]]);
} else {
ans[ans.length - 1].push(list[i]);
}
}
if (ans[ans.length - 1].length < 2) {
ans.pop();
}
console.log(ans); // [[1, 2], [3, 4], [5, 6], [7, 8]]
想辦法寫完之後,再慢慢想可以調整的部分。例如要將二維陣列拆開來的方式有很多種,這裡先示範使用三個點的語法糖將陣列拆開,再自訂函式方便複用,避免 2 個的和 4 個的都要寫一次
解法:
let input = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let list = [];
input.forEach(item => list.push(...item));
console.log(list); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
function to2DArray(array, rowSize) {
let ans = [];
for (let i = 0; i < array.length; i += rowSize) {
const tempList = array.slice(i, i + rowSize);
if (tempList.length === rowSize) ans.push(tempList);
}
return ans;
}
console.log(to2DArray(list, 2)); // [[1, 2], [3, 4], [5, 6], [7, 8]]
console.log(to2DArray(list, 4)); // [[1, 2, 3, 4], [5, 6, 7, 8]]
另外要展平二維陣列也可以使用下面的方式一行解決:
let input = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let list = input.reduce((array, val) => array.concat(val), []);
console.log("list", list); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
參考資料:
完整 JavaScript 陣列 Array 詳細教學和範例
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com