Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng 2-D số, arr, làm đối số đầu tiên và hai số, r và c, đại diện cho số hàng và số cột của ma trận mong muốn.
Hàm phải tạo và trả về một mảng 2-D mới với hàng và cột chỉ định theo cùng thứ tự duyệt hàng (row-traversing) như mảng đầu vào.
Ví dụ, nếu đầu vào là:
const arr = [ [6, 7], [8, 9] ]; const r = 1, c = 4;
Thì đầu ra nên là:
const output = [[6, 7, 8, 9]];
Giải thích kết quả
Duyệt theo hàng của arr là [6, 7, 8, 9]. Ma trận reshape mới là 1 * 4, lấp đầy hàng theo hàng dùng danh sách trước.
Ví dụ
Dưới đây là mã:
const arr = [
[6, 7],
[8, 9] ];
const r = 1, c = 4;
const reshapeArray = (arr, r, c) => {
if (r * c !== arr.length * arr[0].length) {
return arr
}
const res = []
let row = []
arr.forEach(items => items.forEach((num) => {
row.push(num)
if (row.length === c) {
res.push(row)
row = []
}
}))
return res
};
console.log(reshapeArray(arr, r, c));
Kết quả
Kết quả console:
[[6, 7, 8, 9]]