2017-09-26 156 views
0

需要幫助: 我有我的JSON格式數組。我似乎無法包圍我的頭是如何匹配用戶輸入時所述數組的所有內容。我可以顯示整個數組,我可以檢查輸入是否在數組中。返回json數組如果匹配輸入

代碼:

//user input 
var product = document.getElementById('product').value; 
var price = document.getElementById('price').value; 
var quantity = document.getElementById('quantity').value; 

//Products 
var viewInventory = [{ 
    id : 'a', 
    name : 'iphone', 
    model : 10, 
    price : 900, 
    quantity : 25 
}, {  
    id: 'b', 
    name : 'pixel', 
    model : 1, 
    price : 800, 
    quantity : 40 
},{ 
    id: 'c', 
    name : 'pants', 
    model : 8, 
    price : 700, 
    quantity : 80 
},{ 
    id: 'd', 
    name : 'essential', 
    model : 10, 
    price : 900, 
    quantity : 25 
}];//end of viewInventory 

console.log(viewInventory);//just testing to see it JSON obj works 




function hello(){ 
var item; 


for (var i = 0; item = viewInventory[i].name; i++){ 
    console.log(item); 
    // console.log(viewInventory[i].name) 


    if (product === item){ 
     console.log(viewInventory[i]); 

     console.log(item + "This is input"); 
     // document.write(myTable); 
    } 

} 

問題:

下面是我的書(我自學習)的問題。 將文件中的數據拉入複雜的數據結構使得解析更加簡單。許多編程語言都支持JSON格式,這是一種流行的表示數據的方式。

創建一個程序,它的產品名稱作爲輸入和檢索當前的價格和數量爲產物。產品數據在JSON格式的數據文件,看起來像這樣:

{ 
_"products" : [ 
_{"name": "Widget", "price" : 25.00, "quantity": 5 }, 
__{"name": "Thing", "price": 15.00, "quantity": 5}, 
__{"name": "Doodad", "price": 5.00, "quantity": 10} 
__] 
} 

打印如果找到該產品,則輸出產品名稱,價格和數量。如果沒有產品符合搜索條件,說明沒有產品被找到並重新開始。

示例輸出 什麼是產品名稱? iPad 對不起,該產品沒有在我們庫存 產品名稱是什麼?窗口小部件 名稱:小工具 價格:手$ 25.00 數量:5

約束 該文件是JSON格式。使用JSON解析器將值從文件中提取出來。 如果找不到記錄,再次提示。 挑戰 確保產品搜索不區分大小寫。 找不到產品時,詢問是否應添加產品。如果是,請詢問價格和數量,並將其保存在JSON文件中。確保新添加的產品可立即用於搜索而無需重新啓動程序。

+2

究竟什麼是你的問題?這麼多的文本,我不知道你在問什麼...... –

+0

在文本塊的頂部,讀取「需要幫助:」 什麼即時消息要做的是採取用戶輸入和匹配到json目的。然後返回數組中屬於輸入的所有屬性。就像我輸入iphone一樣,它會返回iphone的所有屬性。 –

+0

您需要創建一個onClick處理函數,將來自用戶的輸入文本作爲參數傳遞給函數,一旦通過循環,如果返回true,一旦循環遍歷循環,它應顯示數據,如果爲false,則應該用另一條消息退出循環 – hjm

回答

1

可以使用Array.prototype.filter功能:

var product = document.getElementById('product').value; 
var price = document.getElementById('price').value; 
var quantity = document.getElementById('quantity').value; 

var matchingProducts = viewInventory.filter((v)=>v.name.indexOf(product)>-1); 
if(!matchingProducts.length) alert('Sorry, that product was not found in our inventory'); 
else { 
    alert(
    matchingProducts.reduce(
     (c,i)=>c+i.name+' found with price='+i.price+' and the quantity='+i.quantity+'\n', 
     '' 
    ) 
); 
}