2016-02-02 3 views
-2

Как бы я разделил следующий ответ AJAX на три отдельных объекта на основе атрибута 'product_range', используя JS/jQuery, то есть один массив объектов для всех продуктов 'range-1', один для диапазона -2 'и так далее?Сплит ответ AJAX (JSON)

[ 
    { 
     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" 
    } 
] 
+0

Что такое ожидаемый результат? – Siva

+0

@Siva Для заполнения HTML. – Ryan

ответ

1

Я бы просто использовал уменьшить и нажимать элементы в объект, содержащий массивы.

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

+0

Я думаю, что вам не хватает '{' в вашем 'if' -запросе. – Ryan

+0

Код @Ryan в порядке. {и} не требуется с if. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else – epascarello

+0

Вы абсолютно правы. – Ryan

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

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, чтобы продемонстрировать это.

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

Затем вы можете получить весь объект для заданного диапазона, запросив объект дальнего действия.

Смежные вопросы