拆分AJAX响应(JSON)

时间:2016-02-02 14:50:41

标签: javascript jquery json ajax

如何根据属性" product_range'将以下AJAX响应拆分为三个单独的对象?使用JS / jQuery,即一个对象数组用于所有' range-1'产品,一个用于'范围-2'等等?

[
   {
       title:         "Product 1",
       price:         "12.00",
       product_range: "range-1"
   },
   {
       title:         "Product 2",
       price:         "12.00",
       product_range: "range-2"
   },
   {
       title:         "Product 3",
       price:         "12.00",
       product_range: "range-3"
   }
]

5 个答案:

答案 0 :(得分:1)

我只是将reduce和push项用于包含数组的对象。

    var items = [
       {
           title:         "Product 1",
           price:         "12.00",
           product_range: "range-1"
       },
       {
           title:         "Product 2",
           price:         "12.00",
           product_range: "range-2"
       },
       {
           title:         "Product 3",
           price:         "12.00",
           product_range: "range-3"
       }
    ];
    
    var grouped = items.reduce( function (obj, item) { 
       if (!obj[item.product_range]) obj[item.product_range] = [];
       obj[item.product_range].push(item);
       return obj;
    }, {});
    
    console.log(grouped);    
    console.log(grouped["range-1"]);

答案 1 :(得分:0)

使用方法" filterByProductRange"通过product_range筛选出数据。



var obj = [
   {
       title:         "Product 1",
       price:         "12.00",
       product_range: "range-1"
   },
   {
       title:         "Product 2",
       price:         "12.00",
       product_range: "range-2"
   },
   {
       title:         "Product 3",
       price:         "12.00",
       product_range: "range-3"
   }
];



function filterByProductRange(data, product_range) {
  
  return data.filter(function(item) { return item['product_range'] == product_range; });
  }

var range1= filterByProductRange(obj, 'range-1');

console.log(range1);




答案 2 :(得分:0)

您可以使用$.map()来获得类似的结果。

var range1 = new Object(),
    range2 = new Object(),
    range3 = new Object();

$.map(data, function(d){
        if (d.product_range === "range-1") {
         for (var i in d) {
        range1[i] = d[i];
       }
    }
});

data是你的对象数组。

这是一个简单的fiddle来证明这一点。

答案 3 :(得分:0)

如果您的意思是按product_range对数据进行分组,那么:

//json is your json data
var result = {};
for(var i=0; i<json.length;i++)
{
  if(result[json[i].product_range] === undefined) result[json[i].product_range] = [];
  result[json[i].product_range].push(json[i]);
}

答案 4 :(得分:0)

这样的事情应按范围分组。

var ranged = {};
var data = [{
  title: "Product 1",
  price: "12.00",
  product_range: "range-1"
}, {
  title: "Product 2",
  price: "12.00",
  product_range: "range-2"
}, {
  title: "Product 3",
  price: "12.00",
  product_range: "range-3"
}]

$.each(data, function(i, x) {
  if (ranged[x.product_range]) {
    ranged[x.product_range].push(x);
  } else {
    ranged[x.product_range] = [x];
  }
});

console.log(JSON.stringify(ranged));

然后,您应该能够通过查询范围对象来检索给定范围的所有对象。