2015-03-18 4 views
0

Я хочу циклически перемещаться по массиву строк и разбивать эти строки на определенный символ, а затем передавать эти новые строки в массив, например. возьмите строку «val: key» из первого массива, а затем используйте функцию для извлечения строки из массива и разделите ее на «:» на новый массив, который будет содержать [«val», «key»]. Это то, что у меня есть до сих пор, а внизу - то, что возвращается, когда console.log.Анализ массива строк в новый массив javascript

var dict = []; 
dict.push("me; pro: myself"); 
dict.push("labor, laboris; n: work"); 
dict.push("voco, vocare, vocavi, vocatum; v: call"); 

function parseDict(arr){ 
/* parseDict takes a dictionary entry and splits it between its latin part and its part of speech/english translation*/ 
    var dictFinal = []; 
    arr.toString(); 
    for (i = 0; i < arr.length; i++){ 
    dictFinal[i] += arr[i].split(";"); 
    } 
    return dictFinal; 
} 

console.log(parseDict(dict)) prints out 
[ 0: "undefinedme; pro: myself" 
    1: "undefinedlabor, laboris; n: work" 
    2: "undefinedvoco, vocare, vocavi, vocatum; v: call" 
] 

Почему он не разбивается на две строки на «;» и почему он возвращает неопределенное значение?

+1

'dictFinal.push (...)' или 'dictFinal [i] = ...' – andlrc

+1

'arr.toString();' не имеет смысла – epascarello

ответ

4

Это не определено, потому что вы делаете += в пустой индекс массива

dictFinal[i] += arr[i].split(";"); 
      ^^ 

Первый проход dictFinal[i] не определен, так что

dictFinal[i] = undefined + arr[i].split(";"); 

Вы, вероятно, просто хотите

dictFinal[i] = arr[i].split(";"); 
0

Использовать dictFinal.push(...) или dictFinal[i] = ...

Вызов arr.toString(); не делает много в вашем случае; он просто делает строку из массива, который затем, как ожидается, будет назначен переменной/возвращается и т.д ...


var dict = []; 
dict.push("me; pro: myself"); 
dict.push("labor, laboris; n: work"); 
dict.push("voco, vocare, vocavi, vocatum; v: call"); 

function parseDict(dict) { 
    // considered that you know the final length of the final 
    // length of the array you could use: new Array(dict.length) 
    var dictFinal = []; 
    for (i = 0; i < dict.length; i++) { 
    dictFinal[i] = dict[i].split(";"); 
    } 
    return dictFinal; 
} 

console.log(parseDict(dict)); // [["me"," pro: myself"],["labor, laboris"," n: work"],["voco, vocare, vocavi, vocatum"," v: call"]] 

+= будет пытаться получить все, что находится в переменной и CONCAT/добавить с тем, что находится на правой стороне от знака равенства:

var a = 'abc'; 
a += 'def'; 
console.log(a); // abcdef 

var b = 1; 
b += 1; 
console.log(b); // 2 

// and your's case: 
var c; // here c === undefined (your case dictFinal[i] === undefined) 
c += 'ABC'; 
console.log(c); // undefinedABC 

var my_array = [1,2,3]; 
// .toString() is called on the array so the concatenation can happen: 
// It would be the same as writing: 
// 'my_string' + my_array.toString(); 
// or 'my_string' + my_array.join(','); 
var d = 'my_string' + my_array; 
console.log(d); // my_string1,2,3 
0

, если вы действительно нуждаетесь в + = и не хотел бы видеть «UNDEFINED», могли бы попробовать:

dictFinal[i] = ((typeof dictFinal[i]!=='undefined') ? dictFinal[i]+arr[i].split(";") : arr[i].split(";"));