2016-08-05 14 views
0

したがって、私はcsvファイルを読み込んでangleJSに渡すPHP関数を持っています。 csvファイル内Javascript配列の値をチェックして配列に代入する

、データ

[0] => Number, 
[1] => Code, 
[2] => Description, 
[3] => Qty 

の4種類があるが、 "エリア" データもあります。 「エリア」は「数」の[2]

[0] => "", 
[1] => "", 
[2] => Area, 
[3] => "" 

になりますこれは私が達成したい何イラスト

//Part 1 
"","","Area 1","" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
//Part 2 
"","","Area 2","" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
"No","Code","Description","QTY" 
//And so on 

は、私は面積を取得し、私にそれをプッシュすることができますか、です[0]が空で、[2]がnullでないかどうかをチェックすることによって、配列オブジェクトの残りの領域であり、前と同じ条件を検出すると、別の部分に新しい領域を割り当てます。

これはvm.products

for (var index = 0; index < resp.data.csv.length; index++) { 
    vm.products.push({ 
     code: resp.data.csv[index][1], 
     qty: resp.data.csv[index][3], 
     //area: resp.data.csv[index].area, 
     description: resp.data.csv[index][2] 
    }); 
} 

と呼ばれる、私の配列であるが、任意のヘルプ与えられた:)

答えて

1

まずいただきありがとうございます、あなたは現在のエントリはエリアが含まれているかどうかを確認する必要があります。そうであれば、次のエリアが来るまでそれを保管してください。それが起こったら、古いエリアを新しいエリアに置き換えてください。

アレイにプロダクトをプッシュしている間は、正しいエリアが常に含まれるため、エリア変数を使用してください。

var area = “”; 
for (var index = 0; index < resp.data.csv.length; index++) { 
    var current = resp.data.csv[index]; 
    if (current[2] != “” && (!current[0] || current[0] == "") { 
     area = current[2]; 
    } else { 
     vm.products.push({ 
      code: current[1], 
      qty: current[3], 
      area: area, 
      description: current[2] 
     }); 
    } 
} 

この解決策は、以下の回答で最初にマップを使用すると、複数回ではなくアレイ上で1回だけループします。

+0

卿、コードはほぼ完全に動作しますが、何の製品コードはありませんが、どのように配列にプッシュすることはできませんか? :)あなたが書いたコードでは、配列にヌルの製品コードを追加します。:) – Vinfoster0701

+0

問題はありません。コードを更新してください(製品をelseブロックの配列にプッシュするコードを移動する必要があります) –

+0

コードは今完全に動作します!私のようなジュニアプログラマを助けてくれてありがとう!本当に感謝し、良い一日を!まだ詳細を知る必要があります:) – Vinfoster0701

1

あなただけのデータをマッピングし、フィルタリングすることができます:あなたのサンプルデータのための

var area; 
var res = arr.map(function (d) { 
    if (d[0] == "" && d[2] != null) { 
     area = d[2]; 
     return null; 
    } 

    return { 
     code: d[1], 
     qty: d[3], 
     area: area, 
     description: d[2] 
    } 

}).filter(function (f) { 
    return f; 
}); 

console.log(res); 

出力:

[ { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 1', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 1', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 1', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 1', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 1', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 2', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 2', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 2', 
    description: 'Description' }, 
    { code: 'Code', 
    qty: 'QTY', 
    area: 'Area 2', 
    description: 'Description' } ] 
+0

返事ありがとうございましたmmm :)。心から感謝する ! – Vinfoster0701

+0

あなたは大歓迎です! @ Vinfoster0701 – baao

0

あなたはこのような何かを行う可能性があります。

var csvStr = '"","","Area 1",""\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"","","Area 2",""\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"\n"No","Code","Description","QTY"', 
 
csvDataArr = csvStr.replace(/"/g,'').split("\n").map(s => s.split(",")), 
 
     area, 
 
csvDataObj = csvDataArr.reduce((p,c) => {c[0] === "" && 
 
             c[1] === "" && 
 
             c[3] === "" ? p[area = c[2]] = [] 
 
                 : p[area].push(c); 
 
             return p; 
 
             },{}); 
 
console.log(csvDataObj);

関連する問題