2016-08-05 63 views
0

所以,我有一個PHP函數,它將讀取一個csv文件,然後將它傳遞給angularJS。Javascript數組檢查值並分配到數組中

裏面的csv文件中,有4種類型的數據

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

然而,也有 「區」 的數據。在「區域」將在「數」 [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]不爲空,然後它是數組對象其餘部分的區域,並且一旦檢測到與之前相同的條件,就會爲另一部分分配新區域。

這是我的數組,稱爲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

首先,你必須檢查當前條目是否包含區。如果是這樣,請存儲它,直到下一個區域出現爲止。當發生這種情況時,只需用舊的區域替換舊的區域。

將產品推入陣列時,只需使用Area變量,因爲它總是包含正確的區域。

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

該解決方案將循環只有在下面的答案首先使用地圖時,在你的陣列,而不是多次一次。

+0

爵士,代碼幾乎完美的作品,但我怎麼也推入陣列,同時在沒有產品代碼?因爲通過您編寫的代碼,它會將空產品代碼添加到數組中。:) – Vinfoster0701

+0

沒問題,更新了我的代碼(您需要移動將產品推入到else塊中的數組的代碼) –

+0

sir the代碼現在完美地工作!非常感謝你幫助像我這樣的初級程序員!真的很感激它,祝你有一個愉快的一天!仍然需要了解更多:) – 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

非常感謝你的答覆先生嗯嗯:)。真的很感激它! – 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);