如果匹配输入

时间:2017-09-26 00:46:14

标签: javascript 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文件中。确保新添加的产品可立即供搜索,无需重新启动程序。

1 个答案:

答案 0 :(得分: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',
      ''
    )
  );
}