拆分 AJAX 响应 (JSON)

Split AJAX response (JSON)

本文关键字:JSON 响应 AJAX 拆分      更新时间:2023-09-26

如何使用 JS/jQuery 根据属性 'product_range' 将以下 AJAX 响应拆分为三个单独的对象,即一个对象数组用于所有 'range-1' 产品,一个对象数组用于 'range-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"
   }
]

我只会使用 reduce 并将项目推送到包含数组的对象中。

    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"]);

使用方法 "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);

如果您的意思是按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]);
}

这样的东西应该按范围分组。

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));

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

您可以使用

$.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是你的对象数组。

这里有一个简单的小提琴来证明这一点。