2017-02-18 6 views
0

У меня есть 2D-массив, содержащий профили учащихся. Где столбец 1 содержит имя, Col2 содержит имя, фамилию Col3 и т. Д.Объединение строковых элементов в многомерном массиве с использованием Javascript

То, что я надеюсь сделать, это соединить текст из всех трех столбцов, преобразовать в верхний регистр, а затем поместить обратно на столбец 1 i.e «FIRSTMIDDLELAST» в ячейке A1.

Мой фрагмент кода ниже, кажется, прямо вперед достаточно, но я только новичок в 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:

Это небольшой образец таблицы Google, где я мой массив пришел из ....

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 [я] [0] .valueOf() toUpperCase();. ', Открытый ваши DevTools и проверьте с помощью консоли. в то время как точка останова остановлена ​​... также кажется, что вы используете один и тот же столбец для всех трех имен ... ваш должен изменить ваш 'StudentList [i] [0]' для 'StudentList [i] [1]' и '[ 2] ' – andrepaulo

+3

Можете ли вы включить пример массива в Question? Какова цель '.valueOf()' call? – 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); работает еще 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