簡體   English   中英

替換嵌套數組中的所有元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM