bugfix> javascript > 投稿

JavaScriptにはコンマで区切られた文字列があり、各列に対して複数の配列に分割したいのですが、最初の数行は無視したいです。たとえば、次の文字列を変換したい場合、

let data = "test,data,\n,ignore,this,\n,A,B,C,\n,1,2,3,\n,1,2,3";

次のような配列に。

["A", "1", "1"]
["B", "2", "2"]
["C", "3", "3"]

編集

これは、私が試した最初の解決策です。うまくいきますが、本当に良い解決策ではありません:/

for (let i = 1; i < out.length; i++)
{
   let arr = out[i].split(',');
   if (i === 1)
   {
       for (let j = 0; j < columns; j++)
       {
         let col = "arr" + j;
         console.log(col);
         obj[col] = [arr[j]];
       }
       console.log(obj);
   }
   else
   {
      for (let j = 0; j < columns; j++)
      {
        let col = "arr" + j;
        let val = arr[j];
        if (j !== "")
        {
            obj[col].push(val);
        }
      }
   }
}

最終的に、文字のマップを対応する数字の配列に作成したいので、キー値がどうなるかはわかりません。だから私は次のようなものを得ようとしています、

"A": ["1", "1"]
"B": ["2", "2"]
"C": ["3", "3"]

回答 3 件
  • ',\n,' で分割できます  行を取得し、アイテムをコンマで分割します。次に、最初の2つの配列を省略します。

    var data = "test,data,\n,ignore,this,\n,A,B,C,\n,1,2,3,\n,1,2,3",
        result = data.split(',\n,').map(s => s.split(',')).slice(2);
        
    console.log(result);
    
    

  • 期待される結果を得るには、最初に文字列を「、」で分割し、結果の配列でループを実行し、その変換の中で、数字のアルファベットと一致する数字を比較して、それぞれの配列にプッシュする必要があります。 以下のコードのような

    var datArray= [];
    a = [];
    b = [];
    c = [];
    let data = "test,data,\n,ignore,this,\n,A,B,C,\n,1,2,3,\n,1,2,3";
    datArray = data.split(',');
    for(var i = 0; i < datArray.length; i++) {
      if(datArray[i] == 'A' || datArray[i] == 1) {
        a.push(datArray[i]);
      } else if(datArray[i] == 'B' || datArray[i] == 2) {
        b.push(datArray[i]);
      } else if(datArray[i] == 'C' || datArray[i] == 3) {
        c.push(datArray[i]);
      }
    }
    console.log(a);
    console.log(b);
    console.log(c);
    
    

    これはあなたができる方法の一つです...

  • このメソッドはハードコーディングされていません!このメソッドを使用すると、次を処理できます。 ABCDEF ....、1 2 3 4 5 6 ...

    最初のアクションのために分割します。次に、Not A Number関数isNaNを検出してA B Cを検出します。

    配列ヘルパー:  var notNumber = [];  var numbers = [];

    データを保存する。

    最後に、結果の配列を生成します!

    これを試して :

    var data = "test,data,\n,ignore,this,\n,A,B,C,\n,1,2,3,\n,1,2,3";
    var handler = data.split(",");
    var preventFlag = true;
    var countNaN = 0;
    var notNumber = [];
    var numbers = [];
    //console.log(handler);
     
    for (var x = 0;x < handler.length;x++) {
      var currentData = handler[x];
        
      if (preventFlag == false) {
      
        if ( isNaN(currentData) ) {
            notNumber.push(currentData);
        }
        else {
           if (currentData != "\n") {   
             numbers.push(currentData);
           }
        }
        
      }
      if (currentData == "this"){
         preventFlag = false;
      }
    
    }
    //console.log(notNumber)
    //console.log(numbers)
    for (var z = 0; z < notNumber.length;z++) {
     
        window["result" + z] = [];
        window["result" + z].push(notNumber[z]);
            
        //console.log(window["result0"])
            
       window["result" + z].push(numbers[z])
       window["result" + z].push(numbers[z + (notNumber.length) ])
    }
    // GENERATE RESULT ARRAY
      console.log(window["result0"]);
      console.log(window["result1"]);
      console.log(window["result2"]);
    //["A", "1", "1"]
    //["B", "2", "2"]
    //["C", "3", "3"]
    
    

あなたの答え