使用Javascript连接多维数组中的字符串元素

问题描述:

我有一个包含学生配置文件的二维数组。在列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

该代码似乎很好,也许你有错误的数组值?

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

假设你的结构是这样的(如你所述):

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