簡體   English   中英

在對象的JavaScript數組中查找元素的索引

[英]Find index of an element in javascript array of objects

我是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");

您在示例中尋找的名稱更深一層。 這應該工作:

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

暫無
暫無

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

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