我有一個看起來像這樣的陣列:
arr = [[1,2,3],
[4,5,6],
[7,8,9]]
我已經初始化了一個空陣列,我想將 arr 的對角線放在新陣列中。所以我試過這個:
arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
new_arr = [];
tail = arr.length - 1;
for (let i = 0; i < arr.length; i ) {
for (let j = 0; j < arr[i].length; j ) {
if (j == i) {
new_arr.push(arr[i][j]);
}
if (j == tail) {
new_arr.push(arr[i][j]);
tail--;
}
}
}
console.log(new_arr)
邏輯似乎有效,但我似乎無法正確構建結構。我想要的是在新陣列中嵌套兩個陣列,如下所示:
[[1,5,9],[3,5,7]]
但我得到的是一個正確值無序的陣列。如何獲得預期的輸出?任何幫助表示贊賞。謝謝!
uj5u.com熱心網友回復:
var arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var diagonal1 = [];
var diagonal2 = [];
for (var i = 0; i < arr.length; i ) {
diagonal1.push(arr[i][i]);
diagonal2.push(arr[i][arr.length - i - 1]);
}
var new_arr = [diagonal1, diagonal2];
console.log(new_arr)
uj5u.com熱心網友回復:
如果數字矩陣的寬度和高度始終相等,則以下解決方案對您有用。
const arr = [[1,2,3],
[4,5,6],
[7,8,9]];
const result = [[],[]];
arr.map((row,index) => {
result[0].push(row[0 index]);
result[1].push(row[row.length - index - 1]);
});
console.log(result); // [[1,5,9],[3,5,7]]
uj5u.com熱心網友回復:
您需要有 2 個單獨的臨時陣列。而且您不需要嵌套回圈。如果你理解數學,你可以用一個回圈來優化這樣的代碼。
arr = [[1,2,3],
[4,5,6],
[7,8,9]];
function findDiagonals(arr) {
const diagonal_1 = [];
const diagonal_2 = [];
for( let i = 0; i < arr.length; i ) {
diagonal_1.push(arr[i][i]);
diagonal_2.push(arr[i][arr.length - (i 1)]);
}
return [diagonal_1, diagonal_2];
}
console.log(findDiagonals(arr));
uj5u.com熱心網友回復:
難度低:
const
arr = [[1,2,3],[4,5,6],[7,8,9]]
, new_arr = [[],[]]
;
let p0 = 0, p1 = arr.length
for( let inArr of arr)
{
new_arr[0].push( inArr[p0 ] )
new_arr[1].push( inArr[--p1] )
}
console.log( JSON.stringify( new_arr ))
uj5u.com熱心網友回復:
這是一種O(n)使用函式的方法Array.prototype.reduce。
const arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const result = arr.reduce(([left, right], array, row, {length}) => {
return [[...left, array[row]], [...right, array[length - row - 1]]];
}, [[],[]]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/495081.html
標籤:javascript 数组
下一篇:如何使道具等于尚不存在的狀態?
