根据ID - Angular.js过滤JSON数据

时间:2018-03-22 06:05:21

标签: javascript angularjs

'products': [{  // List of productFieldObjects.
    'name': 'Triblend Android T-Shirt',     
    'item_id': '12345',
    'item_price': '15.00',
    'brand': 'Google',
    'category': 'Apparel',
    'variant': 'Black',
    'quantity': 1, 
    'something' : 'anc',
    'something2' : 'xyz',
    'something3' : 'yyy'                     
   },
   {
    'name': 'Triblend Android T-Shirt',
    'item_id': '12345',
    'item_price': '15.00',
    'brand': 'Google',
    'category': 'Apparel',
    'variant': 'Black',
    'quantity': 1,
    'something' : 'anc',
    'something2' : 'xyz',
    'something3' : 'yyy'
   },
   {
    'name': 'Triblend Android T-Shirt',
    'item_id': '12345',
    'item_price': '15.00',
    'brand': 'Google',
    'category': 'Apparel',
    'variant': 'Black',
    'quantity': 1,
    'something' : 'anc',
    'something2' : 'xyz',
    'something3' : 'yyy'
   }

必须过滤掉以下数据。

'products': [{
        'name': 'Triblend Android T-Shirt',       
        'id': '12345',
        'price': '45.00',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Black'
        'quantity': 3
       }]

从数组中过滤数据并返回单个数组对象(如果它与ID匹配)。如果有3个项目数量和价格也应该添加

当前代码

var filter = products.filter(function(items){
                    if(items.id == products.id){
                      return items;
                    }
                })

我如何能够提前做好这一点,并提前感谢

2 个答案:

答案 0 :(得分:2)

下面的condense() function遍历其array中的paramsproductsid并更新quantity并相应地price值,直到最终array的{​​{1}}缩写为products

有关详细信息,请参阅Object.values()Array.prototype.reduce()destructuring assignmentparseFloat()

returned

答案 1 :(得分:0)

您可以将array#reduce与对象解构一起使用,仅选择所需的键,使用所有提取的值创建id为关键字对象和对象作为值,对于相同的键添加数量。然后使用Object.values()从该对象中提取所有值。



var data = {'products': [{ 'name': 'Triblend Android T-Shirt', 'item_id': '12345', 'item_price': '15.00', 'brand': 'Google', 'category': 'Apparel', 'variant': 'Black', 'quantity': 1,'something' : 'anc','something2' : 'xyz','something3' : 'yyy' }, { 'name': 'Triblend Android T-Shirt', 'item_id': '12345', 'item_price':'15.00', 'brand': 'Google', 'category': 'Apparel', 'variant': 'Black', 'quantity': 1,'something' : 'anc','something2' : 'xyz','something3' : 'yyy' }, { 'name': 'Triblend Android T-Shirt', 'item_id': '12345', 'item_price': '15.00', 'brand': 'Google', 'category': 'Apparel', 'variant': 'Black', 'quantity': 1,'something' : 'anc','something2' : 'xyz','something3' : 'yyy' } ]},
  result = Object.values(data.products.reduce((r,{name,item_id: id,item_price: price,brand = '',category = '', variant = '', quantity}) => {
    r[id] = r[id] || {name,id,brand,category,variant, price: 0, quantity: 0};
    r[id].price += +price;
    r[id].quantity += quantity;
    return r;
  },{}));
console.log(result);