2017-02-18 75 views
0

我有一個包含學生配置文件的二維數組。在列1包含名字的地方,列2包含中間名,列3姓氏等等。使用Javascript連接多維數組中的字符串元素

我希望做的就是加入所有三列的文本,轉換爲大寫,然後放回第1列,即單元格A1中的「FIRSTMIDDLELAST」。

我的代碼片斷如下似乎直截了當不夠好,但我只是很新的JS,在執行我得到一個錯誤..

無法從不確定的讀取屬性「0」。

@線

StudentList [I] [0] .concat(FistName,MidlName,姓氏);

for (var i=0; i<StudentList.length; i++){ 
     var FistName = StudentList[i][0].valueOf().toUpperCase(); 
     var MidlName = StudentList[i][0].valueOf().toUpperCase(); 
     var LastName = StudentList[i][0].valueOf().toUpperCase(); 

     StudentList[i][0].concat(FistName,MidlName,LastName); 
    }  

一些幫助將不勝感激。 非常感謝你的進步。

UPDATE:

這是谷歌電子表格,我我的數組來自小樣本....

First Middle Last  Age Grade English Maths 
John Peter Smith 17 12  A  A 
Kevin Paul  James 16 11  B  C 
Kim  Caroline Anderson 15 10  B  A 
.... so on 
+0

似乎你的第二列是空,則把命令'調試器;''之前變種FistName = StudentList [I] [0] .valueOf()toUpperCase();',開您的DevTools並使用控制檯進行檢查。當斷點停止時......似乎你對所有三個名字都採用相同的列......你應該爲'StudentList [i] [1]'和'[']更改'StudentList [i] [0] 2]' – andrepaulo

+3

你可以在問題中包含數組的示例嗎?什麼是'.valueOf()'調用的目的? – guest271314

回答

1

該代碼似乎很好,也許你有錯誤的數組值?

var StudentList = []; 
 
StudentList.push(['First', 'Middle', 'Last']); 
 

 
document.write('original: ' + StudentList.toString() + '<br/>'); 
 
for (var i=0; i<StudentList.length; i++){ 
 
    var FistName = StudentList[i][0].valueOf().toUpperCase(); 
 
    var MidlName = StudentList[i][1].valueOf().toUpperCase(); 
 
    var LastName = StudentList[i][2].valueOf().toUpperCase(); 
 

 

 
    //StudentList[i][0].concat(FistName,MidlName,LastName); 
 
    StudentList[i][0] = FistName.concat(MidlName,LastName); //i think you mean this 
 
}; 
 
document.write('modified: ' + StudentList.toString());

+0

你的方法沒有錯誤!那麼爲什麼然後StudentList [i] [0] = FistName.concat(MidlName,LastName); workslist StudentList [i] [0] = FistName + MidlName + LastName;沒有,所以我們可以學習以備將來參考。 – user1488934

0

假設你的結構是這樣的(如你所述):

var StudentList = [ 
    ['fname1','mname1','lname1'], 
    ['fname2','mname2','lname2'], 
    ['fname3','mname3','lname3'] 
]; 

你的代碼可能是這樣的:

for (var i = 0; i < StudentList.length; i++) { 
    var FistName = StudentList[i][0].toUpperCase(); 
    var MidlName = StudentList[i][1].toUpperCase(); 
    var LastName = StudentList[i][2].toUpperCase(); 

    StudentList[i][0] = FistName + MidlName + LastName; 
} 

/* 
[ 
    [ 
    "FNAME1MNAME1LNAME1", 
    "mname1", 
    "lname1" 
    ], 
    [ 
    "FNAME2MNAME2LNAME2", 
    "mname2", 
    "lname2" 
    ], 
    [ 
    "FNAME3MNAME3LNAME3", 
    "mname3", 
    "lname3" 
    ] 
] 
*/ 

幾點:

  1. 你不需要.valueOf()這裏得到的值;
  2. concat不會修改實際值,但創建一個新的字符串。所以,你必須將結果分配給StudentList[i][0];
  3. 您可以將JavaScript中的字符串與+運算符連接起來;
+0

感謝@mrlew,不記得我爲什麼最終得到.valueOf()也許我只是在嘗試不同的東西,看看它是否有幫助。所以即使在嘗試你的代碼之後,我仍然收到錯誤「無法將未定義的屬性」0.0「設置爲」JOHNPETERSMITH「」。儘管至少大寫和連接函數起作用,但問題似乎是將字符串插入到數組中。 – user1488934

+0

上面的代碼適用於我發佈的結構,因爲你沒有顯示你的數據。表格圖是不夠的。 JavaScript中沒有像列一樣的東西。你可以有一個數組的數組(我寫的)。所以你必須在做任何操作之前知道你的數據。請做一個'console.log(StudentList)'並用結果編輯你的問題(F12打開控制檯)。 – mrlew