2014-10-08 5 views
2

Если у меня есть объект JavaScript, как это:Как фильтровать элементы массива в объекте JavaScript

{"products": 
    [ 
     { 
      "id":"6066157707315577", 
      "reference_prefix":"BB", 
      "name":"BeanieBaby", 
      "product_line":false, 
      "has_ideas":true 
     }, 
     { 
      "id":"6066197229601550", 
      "reference_prefix":"BBAGS", 
      "name":"BlackBags", 
      "product_line":false, 
      "has_ideas":false 
     } 
    ], 
    "pagination": { 
     "total_records":4, 
     "total_pages":1, 
     "current_page":1 
    } 
} 

Как написать функцию в JS в цикле по каждой паре и возвращать только элементы массива, в котором has_ideas === true?

Я начал с этого, но я застрял. Ясно, что я новичок в этом. Любая помощь оценивается.

product: function(mybundle) { 

    var json = JSON.parse(mybundle.response.content); 
    for(var i = 0; i < json.length; i++) { 
     var obj = json[i]; 

     if (json[i].id === "has_ideas" && json[i].value === true) { 
      return json; 
     } 
     return []; 
    } 
} 

ответ

0

Вы можете отфильтровать каждую пару, просто проверяя, что свойство:

var json = {"products":[{"id":"6066157707315577","reference_prefix":"BB","name":"BeanieBaby","product_line":false,"has_ideas":true},{"id":"6066197229601550","reference_prefix":"BBAGS","name":"BlackBags","product_line":false,"has_ideas":false}],"pagination":{"total_records":4,"total_pages":1,"current_page":1}} 

var stuff = json.products.filter(function(obj) { 
    return obj.has_ideas === true 
}); 

console.log(stuff); 

Демо: http://jsfiddle.net/bsyk18cb/

+0

Это близко, но то, что мне нужно возвращение нового JSON строка, содержащая каждый продукт, который has_ideas === верно – pgtips

+0

как в {» продукты ": [{ "has_ideas": правда, "product_line": ложь, "Идентификация": "6066157707315370577", "reference_prefix": "BB", "имя":" BeanieBa на " }, { "has_ideas": правда, "product_line": ложь, "идентификатор": "6065458112963554815", "reference_prefix": "DEMO", "имя":" Fredwin задействуя (Демо) " } ]} – pgtips

0

попробовать это

product: function(mybundle) { 
    var json = JSON.parse(mybundle.response.content); 
    for(var i = 0; i < json.length; i++) { 
     if(json[i].has_ideas === true){ 
      return json; 
     } 
     return []; 
    } 
} 
0

Вы хотите проверить "has_ideas" атрибут, и если true, верните идентификатор.

product: function(mybundle) { 

    var json = JSON.parse(mybundle.response.content); 
    for(var i = 0; i < json.length; i++) { 
     if (json[i].has_ideas === true) { 
      return json[i].id; 
     } 
     return []; 
    } 
} 
+0

Что мне нужно для возврата - это новая строка json, содержащая каждый продукт с has_ideas === true. – pgtips

-1

Используйте код ниже.

это вернет массив элементов, имеющего has_ideas=true

var json = "{'products':"+ 
    "["+ 
     "{"+ 
      "'id':'6066157707315577',"+ 
      "'reference_prefix':'BB',"+ 
      "'name':'BeanieBaby',"+ 
      "'product_line':false,"+ 
      "'has_ideas':true"+ 
     "},"+ 
     "{"+ 
      "'id':'6066197229601550',"+ 
      "'reference_prefix':'BBAGS',"+ 
      "'name':'BlackBags',"+ 
      "'product_line':false,"+ 
      "'has_ideas':false"+ 
     "}"+ 
    "],"+ 
    "'pagination': {"+ 
     "'total_records':4,"+ 
     "'total_pages':1,"+ 
     "'current_page':1"+ 
    "}"+ 
"}"; 

function filter(){ 
    var jsonArr = []; 
    var gList = eval("(" + json + ")"); 
    alert(gList.products.length); 
    for(var i=0;i<gList.products.length;i++){ 
     if(gList.products[i].has_ideas){ 
      jsonArr.push(gList.products[i]); 
     } 
    } 
    return jsonArr; 
} 

Demo

+0

Почему downvoted? –