2017-09-25 89 views
1

所以我有一個CSV滿飲數據如何有選擇地打印數組中的列表部分?

飲料,ABV,類型杜松子酒,45,精神普羅塞克,11,酒伏特加,40,精神 苦艾酒,70,精神雪利酒,20,葡萄酒烈性黑啤酒, 8,啤酒貯藏啤酒,4,啤酒 茴香烈酒,37,精神

這是我的JS,我想它要經過陣列和檢查烈酒,然後打印出在控制檯的精神。

var spirit_list = []; 

function drink(a,b,c) { 
    this.Drink = a; 
    this.ABV = b; 
    this.Type = c; 

} 

d3.csv("alcohol.csv", function(data) { 
    data.forEach(function(d){ 
     myDrink = new drink(); // new drink object 
     if (d.Type === "Spirit"){ //logic to grab spirits 
      myDrink.name = d.Drink; // assign obj values 
      myDrink.abv = +d.ABV; 
      spirit_list.push(myDrink) // push the obj to a list 
     }; 
    console.log(spirit_list); 
     // d.abv = +d.ABV; // + : converts into a number, instead of the default string 
    }) 
    // console.log(data); // data becomes sucked into console.log and becomes an array 
    // fyi everything is parsed into strings (from the spreadsheet .csv to the log) 
}); 

} 

但我只想名字和ABV展現出來,我不希望所有的其他對象屬性(飲料,酒精度,和類型顯示爲未定義)

控制檯日誌輸出:0:Object {Drink:undefined,name:「Gin」,abv:45,...}

可能嗎?

+0

以及你將需要刪除。如果該方法定義了a,b,c,那麼當你調用它時,爲什麼不把它們傳入? – epascarello

+0

這是我的助教建立的教程場景。我同意你的觀點,但她不知何故(或者在她的屏幕截圖中欺騙/遺漏了未定義的內容)刪除了未定義的屬性。我是否可以簡單地通過爲屬性傳遞空字符串來修復它?但是,不管怎樣,這個領域會顯現出來嗎? –

+0

比創建時不定義飲料。 – epascarello

回答

2

你有你的drink函數,這很好,它是一個簡單的'類',你可以用它來創建多個飲料列表。

function drink(a,b,c) { 
    this.Drink = a; 
    this.ABV = b; 
    this.Type = c; 

} 

你在drink定義的三個屬性是當您創建的每個myDrink對象,你應該使用什麼。像這樣更改您的創建代碼...在if語句中移動飲料創建,並只添加所需的屬性。如果您有屬性,你不需要在這種情況下使用,只需delete他們:

if (d.Type === "Spirit"){ //logic to grab spirits 
    myDrink = new drink(d.Drink, d.ABV, d.Type); // new drink object 
    delete myDrink['Type']; 
    spirit_list.push(myDrink) // push the obj to a list 
}; 

這裏有一個完整的例子:

var spirit_list = []; 
 

 
function drink(a,b,c) { 
 
    this.Drink = a; 
 
    this.ABV = b; 
 
    this.Type = c; 
 

 
} 
 

 
getData().forEach(function(d){ 
 
    myDrink = new drink(); // new drink object 
 
    if (d.Type === "Spirit"){ //logic to grab spirits 
 
     myDrink = new drink(d.Drink, d.ABV, d.Type); 
 
     delete myDrink['Type']; 
 
     spirit_list.push(myDrink) // push the obj to a list 
 
    }; 
 
    // d.abv = +d.ABV; // + : converts into a number, instead of the default string 
 
}); 
 

 
console.log(spirit_list); 
 
// console.log(data); // data becomes sucked into console.log and becomes an array 
 
// fyi everything is parsed into strings (from the spreadsheet .csv to the log) 
 

 
function getData() { 
 
    return [ 
 
{ 
 
    "Drink": "Gin", 
 
    "ABV": 45, 
 
    "Type": "Spirit" 
 
}, 
 
{ 
 
    "Drink": "Prosecco", 
 
    "ABV": 11, 
 
    "Type": "Wine" 
 
}, 
 
{ 
 
    "Drink": "Vodka", 
 
    "ABV": 40, 
 
    "Type": "Spirit" 
 
}, 
 
{ 
 
    "Drink": "Absinthe", 
 
    "ABV": 70, 
 
    "Type": "Spirit" 
 
}, 
 
{ 
 
    "Drink": "Sherry", 
 
    "ABV": 20, 
 
    "Type": "Wine" 
 
}, 
 
{ 
 
    "Drink": "Stout", 
 
    "ABV": 8, 
 
    "Type": "Beer" 
 
}, 
 
{ 
 
    "Drink": "Lager", 
 
    "ABV": 4, 
 
    "Type": "Beer" 
 
}, 
 
{ 
 
    "Drink": "Ouzo", 
 
    "ABV": 37, 
 
    "Type": "Spirit" 
 
} 
 
]; 
 
}