如果不为空,则在数组元素上进行 Substr

Substr on an array element if not empty

嘿,我有一个包含一些空字符串和一些有内容的字符串的数组。

我想把非空字符串的前5个字母切下来,放到一个新的数组中。我也想保留空的。

示例:

myArray = [ "","","123456789","","",""];
var newArray = ["","","12345","","",""]

我尝试使用 for 循环,如果 myArray[i] 为空则不执行 substr(),但我得到一个错误,它不是一个函数。

其实我不需要把它放到一个新的数组中,我只是想把myArray(i).subsrt(5)的值放到一个splice()中,但是我得到了错误:

VM750:82 Uncaught TypeError: Cannot read property 'substr' of undefined

如果不查看您的所有代码,很难知道您的确切问题是什么,但这里有一个 for 循环遍历第一个数组中的所有元素,并插入每个字符串的前 5 个或更少的字符进入一个新数组。

myArray = [ "","","123456789","","",""];
var newArray = [];
for(var i = 0; i < myArray.length; i++) {
    newArray.push(myArray[i].substr(0,5));
} 

ES6 与 array.map

myArray = [ "","","123456789","","",""];
var newArray = myArray.map((s) => s.substr(0, 5))

正是@le_m所说的:

myArray = [ "","","123456789","","",""];
var newArray = myArray.map(e => e.substr(0, 5));

您需要对非空项使用 substr:
像这样:

myArray = [ "","","123456789","","",""];
for(var i = 0; i < myArray.length; i++) {
    temp = myArray[i];
    if (temp && temp != "")
      myArray[i] = temp.substr(0, 5);
    else
      myArray[i] = "";
}