簡體   English   中英

通過JavaScript中的給定條件讀取對象數組和輸出值

[英]Read array of objects and output values by given conditions in JavaScript

這是問題所在:

客戶想購買兩台同色的白色或黑色同名PC,總價格低於1600。編寫一個JavaScript程序,該程序可以讀取給定的陣列var pcs ,並找到最優惠的價格。

 var pcs = [ { "model":"lenovo", "price":1234, "color":{"red":1,"green":2} }, { "model":"hp", "price":800, "color":{"black":2,"yellow":0} }, { "model":"toshiba", "price":256, "color":{"mėlyna":3,"green":1} }, { "model":"dell", "price":697, "color":{"black":1,"white":2} }, { "model":"acer", "price":620, "color":{"black":4,"white":2} }, { "model":"apple", "price":2560, "color":{"white":3,"black":1} }, { "model":"asus", "price":1001, "color":{"black":2,"yellow":3} } ], PC, Collors, offer = "Offers: " + "\\n"; for (var i = 0; i < pcs.length; i++) { PC = pcs[i]; Collors = Object.keys(PC.color); if ((((PC.price) * 2) <= 1600) && (PC.color.black >= 2 || PC.color.white >= 2)) { for ( var j = 0; j < Collors.length; j++) { if ((PC.color.black >= 2) && (PC.color.white >= 2)) { offer += "\\n" + "model: " + PC.model + "\\n" + "price: " + (PC.price) * 2 + "\\n" + "Collors: " + Collors[0] + " and " + Collors[1] + "\\n"; } else if (((PC.color.black >= 2) && (Collors[j] === "black"))) { offer += "\\n" + "model: " + PC.model + "\\n" + "price: " + (PC.price) * 2 + "\\n" + "Collors: " + Collors[j] + "\\n"; } else if (((PC.color.white >= 2) && (Collors[j] === "white"))) { offer += "\\n" + "model: " + PC.model + "\\n" + "price: " + (PC.price) * 2 + "\\n" + "Collors: " + Collors[j] + "\\n"; } } } } console.log(offer); 

書面代碼可以找到最好的報價,但是有人可以說出為什么輸出中的acer重復嗎?如何修復?

非常感謝您的幫助,

您遍歷Collors 對於acerblackwhite>2 因此,檢查black and white匹配的第一個規則是一次為black ,一次為white

一個解決辦法是不遍歷Collors在所有但檢查blackwhite分別直接:

  var pcs = [ { "model":"lenovo", "price":1234, "color":{"red":1,"green":2} }, { "model":"hp", "price":800, "color":{"black":2,"yellow":0} }, { "model":"toshiba", "price":256, "color":{"melyna":3,"green":1} }, { "model":"dell", "price":697, "color":{"black":1,"white":2} }, { "model":"acer", "price":620, "color":{"black":4,"white":2} }, { "model":"apple", "price":2560, "color":{"white":3,"black":1} }, { "model":"asus", "price":1001, "color":{"black":2,"yellow":3} } ], PC, Collors, offer = [], colors; for (var i = 0; i < pcs.length; i++) { colors = []; PC = pcs[i]; if (PC.color.black >= 2) { colors.push("black"); } if (PC.color.white >= 2) { colors.push("white"); } if (PC.price * 2 <= 1600 && colors.length > 0) { offer.push({ "model": PC.model, "total price": PC.price * 2, "color": colors }); } } console.log(JSON.stringify(offer, undefined, "\\t")); 

解決問題的代碼以在控制台中獲取所需的輸出。

 var pcs = [ { "model":"lenovo", "price":1234, "color":{"red":1,"green":2} }, { "model":"hp", "price":800, "color":{"black":2,"yellow":0} }, { "model":"toshiba", "price":256, "color":{"mėlyna":3,"green":1} }, { "model":"dell", "price":697, "color":{"black":1,"white":2} }, { "model":"acer", "price":620, "color":{"black":4,"white":2} }, { "model":"apple", "price":2560, "color":{"white":3,"black":1} }, { "model":"asus", "price":1001, "color":{"black":2,"yellow":3} } ]; for (var i=0; i < pcs.length; i++) { if((pcs[i].color.black >=2 || pcs[i].color.white >=2) && pcs[i].price *2 <=1600){ //console.log (pcs[i]); var colors = Object.keys(pcs[i].color), color = ''; for(var j = 0; j < colors.length; j++){ if ((pcs[i].color.black >= 2 && colors[j] === "black") || (pcs[i].color.white >= 2 && colors[j] === "white" )) { if (color.length > 0) { color += ' and ' + colors[j]; } else { color = colors[j]; } } } console.log('Model: ' + pcs[i].model + '\\nPrice: ' + pcs[i].price*2 + '\\nSpalvos: ' + color); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM