将一个字符串数组解析为一个新的数组javascript

Parse an array of strings into a new array javascript

本文关键字:一个 数组 javascript 字符串      更新时间:2023-09-26

我想循环遍历一个字符串数组,将这些字符串拆分到某个字符上,然后将这些新字符串输入到一个数组中,例如,从第一个数组中提取字符串"val:key",然后使用函数从数组中检索字符串,并在":"上将其拆分到一个包含["val","key"]的新数组中。到目前为止,这就是我所拥有的,底部是console.log时返回的内容。

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"
]

为什么它没有在";"上拆分为两个字符串,为什么它返回一个未定义的值?

它是未定义的,因为您正在对空数组索引执行+=

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

第一次通过dictFinal[i]未定义,因此它是

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

你可能只是想要

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

使用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"]]

+=将尝试获取变量中的内容,并与等号右侧的内容进行连接/相加:

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

如果您真的需要+=并且不想看到"UNDEFINED",可以尝试:

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