从javascript数组中删除元素导致问题

时间:2016-07-06 15:08:13

标签: javascript arrays

所以我有点担心为什么这不起作用。我试图删除数组中的所有空字符串,它不断给我一个只有一个空字符串的数组。有任何想法吗?

function splitNames(){
    var names = document.getElementById("1").value.split("\n");
    for(var i = 0; i<=names.length; i++){
        if(names[i]==""){
            names = names.splice(i, 1);
            console.log(names);
        }
    }
    console.log(names);
}

顺便说一下,字符串看起来像这样。

您好

您好

(删除这个)

的Bonjour

嗒嗒

(删除这个)

(删除这个)

blah

阵列出现在[&#34;嗨&#34;,&#34;你好&#34;,&#34;&#34;,...]

4 个答案:

答案 0 :(得分:2)

也许最简单的方法是使用filter函数并搜索truthy值。默认情况下,空字符串为false。

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

var strings = ["zebras", "trees", "forests", "", "hi", "wizards", "", "", "lizards"];

strings = strings.filter((e) => e);

console.log(strings);

请注意,默认情况下空字符串为false。但是,仅包含空格字符的字符串为true。在那种情况下,我的例子不起作用,你必须这样做

strings.filter((e) => e.trim());

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

答案 1 :(得分:0)

function splitNames(){
  // var names = document.getElementById("1").value.split("\n");
  var names = "Hi\nHello\n \nGoodBye".split("\n");
  
  var filteredNames = names.filter(function(item){
    return item.trim() !== "";
  });//filter
  
  return filteredNames;
}//splitNames()

console.log( splitNames() );

答案 2 :(得分:0)

创建一个新阵列并推送你需要的东西。

function splitNames(){
    var names = document.getElementById("1").value.split("\n");
    var newArr = [];

    for(var i = 0; i<=names.length; i++){
        if(names[i]){
            newArr.push(names[i]);
        }
    }

    return newArr.join('\n');
    //console.log(names);

}

答案 3 :(得分:0)

试一试:

function splitNames(){

    var names = document.getElementById("1").value.split("\n");
    var newArr = names.filter(function(name){
        return name!=="";
    });

    return newArr;
}