所有真值都與假值交換,反之亦然。未定義和其他陣列元素將被忽略,但我在代碼中遇到錯誤。該錯誤似乎是由陣列中未定義的元素引起的。洗掉未定義元素后的代碼運行正常。
function flipGrid(grid) {
for (let i = 0; i < grid.length; i ) {
for (let k = 0; k < grid[i].length && grid[i] !== undefined; k ) {
if (grid[i][k] === undefined) {
grid[i][k] = undefined;
continue;
}
if (grid[i][k] === true) {
grid[i][k] = false;
} else if (grid[i][k] === false) {
grid[i][k] = true;
}
}
}
return grid;
}
let grid = [
[true, false, undefined, true],
[undefined, false, true, true],
undefined, [undefined, undefined, false, false]
];
console.log(JSON.stringify(flipGrid(grid)));
我很期待這個結果。
should print
[[false,true,undefined,false],
[undefined,true,false,false],
undefined,
[undefined,undefined,true,true]]);
uj5u.com熱心網友回復:
遞回
當你需要在回圈中運行回圈時,遞回函式總是最好的。他們真的很神奇。
function flipgrid(grid) {
return grid.map(gridValue => {
if (Array.isArray(gridValue)) {
return flipgrid(gridValue)
} else {
return (gridValue === undefined) ? gridValue : !gridValue;
}
})
}
let grid = [[true, false, undefined, true],
[undefined, false, true, true],
undefined,
[undefined, undefined, false, false]];
console.log(flipgrid(grid))
uj5u.com熱心網友回復:
此解決方案適用于二維陣列。如果在這種情況下您有更多嵌套陣列,@subodhkalia's則解決方案很好。他不得不稍微修改一下自己的邏輯。
現場演示 :
let grid = [[true, false, undefined, true],
[undefined, false, true, true],
undefined,
[undefined, undefined, false, false]];
function updateItemState(item) {
return (item === false) ? !item : (item === true) ? !item : item
}
const res = grid.map(innerItem => {
if (Array.isArray(innerItem)) {
return innerItem.map(item => updateItemState(item))
} else {
return updateItemState(innerItem)
}
})
console.log(res);
uj5u.com熱心網友回復:
您的陣列定義有誤。有一個未定義的元素未嵌套在陣列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534640.html
下一篇:將控制器中的陣列顯示為視圖中的表
