[英]Replacing all elements in a nested Array
我有一段時間以來一直在與之斗爭的挑戰。 這是關於替換網格形式的數組中的所有元素,但是我的解決方案只是替換其選擇的所選元素,而不是我想要的。
在此挑戰中,我想用字符串“ even”替換可被二整除的整數值,而其余部分則用字符串“ odd”替換。
/ * *- numbers
變量是一個數組數組。 *-嵌套的for
循環以循環顯示numbers
。 *-將每個偶數轉換為字符串“ even” *-將每個奇數轉換為字符串“ odd” * /
var myNumbers = [
[243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
[34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
[67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
[12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
[4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
[5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
[74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
[53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
[67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
[76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];
for(var row=0; row<myNumbers.length; row++) {
for(var column=0;column<myNumbers[row].length;column++) {
if(myNumbers[column]%2===0){
myNumbers[column].splice(column,1,"even");
}else{
myNumbers[column].splice(column,1,"odd");
}
console.log(myNumbers[row][column]);
}
}
代碼輸出:奇數12 23 12 45 45 78 66 223 3 34奇數1 553 23 4 66 23 4 55 67 56奇數553 44 55 5 428 452 3 12 31 55奇數79 44 674 224 4 21 4 2 3 52奇數51 44 1 67 5 5 65 4 5 5奇數5 43 23 4424 74 532 6 7 35 17奇數43 43 66 53 6 89 10 23 52 111奇數109 80 67 6 53 537 2 168 16 2奇數8 76 7 9 6 3 73 77 100 56奇
改用嵌套map
可能更容易:
var myNumbers = [ [243, 12, 23, 12, 45, 45, 78, 66, 223, 3], [34, 2, 1, 553, 23, 4, 66, 23, 4, 55], [67, 56, 45, 553, 44, 55, 5, 428, 452, 3], [12, 31, 55, 445, 79, 44, 674, 224, 4, 21], [4, 2, 3, 52, 13, 51, 44, 1, 67, 5], [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424], [74, 532, 6, 7, 35, 17, 89, 43, 43, 66], [53, 6, 89, 10, 23, 52, 111, 44, 109, 80], [67, 6, 53, 537, 2, 168, 16, 2, 1, 8], [76, 7, 9, 6, 3, 73, 77, 100, 56, 100] ]; const output = myNumbers.map(row => row.map(num => num % 2 === 0 ? 'even' : 'odd' )); console.log(output);
使用for
循環實現同一件事會更加冗長和混亂,在大多數情況下不應該這樣做(數組方法具有更好的抽象性,並且不需要手動迭代),但是在必要時:
var myNumbers = [ [243, 12, 23, 12, 45, 45, 78, 66, 223, 3], [34, 2, 1, 553, 23, 4, 66, 23, 4, 55], [67, 56, 45, 553, 44, 55, 5, 428, 452, 3], [12, 31, 55, 445, 79, 44, 674, 224, 4, 21], [4, 2, 3, 52, 13, 51, 44, 1, 67, 5], [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424], [74, 532, 6, 7, 35, 17, 89, 43, 43, 66], [53, 6, 89, 10, 23, 52, 111, 44, 109, 80], [67, 6, 53, 537, 2, 168, 16, 2, 1, 8], [76, 7, 9, 6, 3, 73, 77, 100, 56, 100] ]; const output = []; for (let rowIndex = 0; rowIndex < myNumbers.length; rowIndex++) { const row = myNumbers[rowIndex]; const newRow = []; for (let colIndex = 0; colIndex < row.length; colIndex++) { const num = row[colIndex]; newRow.push(num % 2 === 0 ? 'even' : 'odd'); } output.push(newRow); } console.log(output);
您為行索引使用了錯誤的變量
myNumbers[column]
//needs to be
myNumbers[row]
另外,您的if條件使用了錯誤的行索引,並試圖與整個數組而不是數組中的值進行比較
if(myNumbers[column]%2===0)
//needs to be
if(myNumbers[row][column]%2===0)
演示版
var myNumbers = [ [243, 12, 23, 12, 45, 45, 78, 66, 223, 3], [34, 2, 1, 553, 23, 4, 66, 23, 4, 55], [67, 56, 45, 553, 44, 55, 5, 428, 452, 3], [12, 31, 55, 445, 79, 44, 674, 224, 4, 21], [4, 2, 3, 52, 13, 51, 44, 1, 67, 5], [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424], [74, 532, 6, 7, 35, 17, 89, 43, 43, 66], [53, 6, 89, 10, 23, 52, 111, 44, 109, 80], [67, 6, 53, 537, 2, 168, 16, 2, 1, 8], [76, 7, 9, 6, 3, 73, 77, 100, 56, 100] ]; for (var row = 0; row < myNumbers.length; row++) { for (var column = 0; column < myNumbers[row].length; column++) { if (myNumbers[row][column] % 2 === 0) { myNumbers[row].splice(column, 1, "even"); } else { myNumbers[row].splice(column, 1, "odd"); } } } console.log(myNumbers);
在內部循環中,您需要使用兩個索引(即myNumbers[row][column]
)訪問值。 就目前而言,您僅使用列索引,因此將值拼接到包含行的數組中。
為什么不簡單地設置myNumbers[row][column]
而不使用splice
呢?
var myNumbers = [
[243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
[34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
[67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
[12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
[4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
[5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
[74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
[53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
[67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
[76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];
for(var row=0; row<myNumbers.length; row++) {
for(var column=0;column<myNumbers[row].length;column++) {
if(myNumbers[row][column]%2===0) {
myNumbers[row][column] = "even";
} else{
myNumbers[row][column] = "odd";
}
console.log(myNumbers[row][column]);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.