javascript - 在 javascript 对象数组中查找元素的索引

标签 javascript

我是 javascript 新手,想要在底部找到给定键值的索引,但无法做到这一点。我哪里错了?数组中的数据是从 json 文件复制的,该文件在 jsonlint 上检查是有效的。

var productArray=[
{
	"name1":"Electronics",
	"id1":{
	        "products1":{
		                 "id":1.1,
		                 "name":"Microsoft Keyboard",
		                 "description":"good keyboard",
		                 "rating":3,
		                 "price":500,
		                 "freeDeliv":true,
		                 "seller":"MS",
		                 "quanAvl":10
	                    },
	        "products2":{
		                 "id":1.2,
		                 "name":"ASUS phone",
		                 "description":"good phone",
		                 "rating":4,
		                 "price":10000,
		                 "freeDeliv":true,
		                 "seller":"ASUS",
		                 "quanAvl":10
	                    },
	        "products3":{
		                 "id":1.3,
		                 "name":"iPhone",
		                 "description":"good phone",
		                 "rating":3,
		                 "price":50000,
		                 "freeDeliv":false,
		                 "seller":"Apple",
		                 "quanAvl":100
	                    }
	      },

	"name2":"Clothing",
	"id2":{
	        "products4":{
		                 "id":2.1,
		                 "name":"Jeans",
		                 "description":"good Jeans",
		                 "rating":3,
		                 "price":800,
		                 "freeDeliv":true,
		                 "seller":"Levis",
		                 "quanAvl":100
	                    },
	        "products5":{
		                 "id":2.2,
		                 "name":"TShirt",
		                 "description":"good TShirt",
		                 "rating":4,
		                 "price":1000,
		                 "freeDeliv":true,
		                 "seller":"Peter",
		                 "quanAvl":1000
	                    },
	        "products6":{
		                 "id":2.3,
		                 "name":"Sherwani",
		                 "description":"very good",
		                 "rating":4,
		                 "price":50000,
		                 "freeDeliv":false,
		                 "seller":"Maanyavar",
		                 "quanAvl":1000
	                    }



}},

];

var display=function(productArray,prodKey,value){
	for(x in productArray)
	{
		if(productArray[x][prodKey]==value)
		{
			console.log(x);
		}
		else{
			alert("Not Found");
		}
	}
}
display(productArray,"name","Sherwani");

最佳答案

这就是答案。我已经尝试过了

var display=function(productArray_,prodKey,value){      

    p = productArray_[0]["id2"];

    found = false;

    for (var key in p) {
      if (p.hasOwnProperty(key)) {
        p2 = p[key];
        for(var key2 in p2){
            if(p2.hasOwnProperty(key2)){
                if(key2 == prodKey && p2[key2] == value){
                    console.log(key2); //index of value you looking for
                    console.log(p2[key2]) //value from index you looking for

                    alert(key2);

                    found = true;
                }
            }
        }
      }
    }

    if(!found)
        alert("not found");
}

display(productArray,"name","Sherwani");

但我同意,这是一个非常糟糕的对象结构。您应该更改 json 结构,以便更轻松地解析它

更新:您应该尽可能避免创建 json 对象(以“{”开头并以“}”结尾),而应创建 json 数组(以“[”开头并以“]”结尾)。

这是一个更好的结构以及如何解析它

var productArray=[
  {
    "name": "Electronics",
    "list": [
      {
        "code": "products1",
        "id": 1.1,
        "name": "Microsoft Keyboard",
        "description": "good keyboard",
        "rating": 3,
        "price": 500,
        "freeDeliv": true,
        "seller": "MS",
        "quanAvl": 10
      },
      {
        "code": "products2",
        "id": 1.2,
        "name": "ASUS phone",
        "description": "good phone",
        "rating": 4,
        "price": 10000,
        "freeDeliv": true,
        "seller": "ASUS",
        "quanAvl": 10
      },
      {
        "code": "products3",
        "id": 1.3,
        "name": "iPhone",
        "description": "good phone",
        "rating": 3,
        "price": 50000,
        "freeDeliv": false,
        "seller": "Apple",
        "quanAvl": 100
      }
    ]
  },
  {
    "name": "Clothing",
    "list": [
      {
        "code": "products4",
        "id": 2.1,
        "name": "Jeans",
        "description": "good Jeans",
        "rating": 3,
        "price": 800,
        "freeDeliv": true,
        "seller": "Levis",
        "quanAvl": 100
      },
      {
        "code": "products5",
        "id": 2.2,
        "name": "TShirt",
        "description": "good TShirt",
        "rating": 4,
        "price": 1000,
        "freeDeliv": true,
        "seller": "Peter",
        "quanAvl": 1000
      },
      {
        "code": "products6",
        "id": 2.3,
        "name": "Sherwani",
        "description": "very good",
        "rating": 4,
        "price": 50000,
        "freeDeliv": false,
        "seller": "Maanyavar",
        "quanAvl": 1000
      }
    ]
  },

]

var display=function(productArray_,prodKey,value){
    found = false;

    for(var key in productArray_){
        for(var key2 in productArray_[key]){
            if(key2 == "list"){                 
                for(var key3 in productArray_[key][key2]){
                    for(var key4 in productArray_[key][key2][key3]){
                        if(key4 == prodKey 
                            && productArray_[key][key2][key3][key4] == value
                            ){
                            console.log(key4);
                            console.log(productArray_[key][key2][key3][key4]);
                            alert(key4);

                            found = true;
                        }                           
                    }
                }
            }
        }
    }

    if(!found)
        alert("not found");     
}

display(productArray,"name","Sherwani");

关于javascript - 在 javascript 对象数组中查找元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43130264/

相关文章:

javascript - 将类属性应用于 jquery 1.3.2 的子项

javascript - 在 JavaScript 中用 <br> 替换 '\n'

javascript - 对具有单独延迟的元素数组进行迭代

javascript - 如何使用javascript读取本地xml文件?

javascript - 它在 body 上使用 div。它不使用get

javascript - jQuery 仅在具有另一个具有特定类的 div 的 div 中运行函数

javascript - 带有 jquery 的 Google 地理 map 在 IE 中失败

javascript - Microsoft Dynamics 365 CRM WebAPI 弃用替换

javascript - Handsontable 在发布前用键替换自动完成值

javascript - Angular http 模块 - 发布标题