2016-07-06 4 views
0

これはなぜ機能していないのか少し不安です。私は配列内の空の文字列をすべて削除しようとしていて、空の文字列の1つだけを返しています。何か案は?javascript配列から要素を削除して問題が発生する

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); 
} 

文字列はこのようになります。

こんにちは

こんにちは

(削除この1)

ボンジュール

何とか

(削除この1)

(削除この1)

何とか配列は、これに出てくる

[「こんにちは」、「こんにちは」、「」、...]

+0

あなただけ({!!アイテムを返す;}関数(アイテム)) 'ary.filterを使用することができ、アレイからのすべての空の文字列を削除するには、'。そしてあなたはそのエラーを受け取ります。あなたはスプライスされたバージョンで毎回名前を置き換え、配列をより短くします。長さをキャッシュするか、2番目の配列を使用します。 – Shilly

答えて

2

は、おそらくこれを行う最も簡単な方法は、filter機能を使用してtruthyを検索することです値。デフォルトでは、空の文字列はfalseです。

filter()メソッドは、指定された関数によって実装されたテストに合格するすべての要素を含む新しい配列を作成します。

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

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

 
console.log(strings);

それはデフォルトでは空の文字列が偽であることに注意することが重要です。ただし、空白文字のみを含む文字列は真です。そのシナリオでは、私の例では動作しないでしょうし、あなたはこの

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

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

+0

ありがとう!!それはうまくいった!どのようにこの作品が説明できますか?フィルタとは何ですか? –

+0

フィルタは名前のとおり、条件に基づいて要素のグループ(配列)をフィルタリングします。例えば、成分のリストを持っていて、果物をフィルターにかけたいとしましょう。 「パスタ、パン、パイナップル、マンゴー、ニンジン」というオリジナルの商品リストがあります。それをフィルタリングして果物だけを得ると、あなたは 'パイナップル、マンゴー 'を持っています –

+0

ああ、この場合、関数booleanは空でない文字列を渡しますか? –

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());

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); 

} 
0

それを試してみてください。

function splitNames(){ 

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

    return newArr; 
} 
関連する問題