Как я могу отфильтровать массив, который имеет массив в нем и на основе конкретного условия из этого внутреннего массива - PullRequest
0 голосов
/ 04 октября 2018

Из приведенного ниже объекта я просто хочу, чтобы весь массив элементов, у которого UnitCharge больше 0. Можно ли это сделать с помощью методов javascript и filter, а также как уменьшить?

[{
    "Description": "xyz",
    "items": [{
        "itemid": 319,
        "itemDescription": "bucket",
        "UnitCharge": 10
      },
      {
        "itemid": 320,
        "itemDescription": "mug",
        "UnitCharge": 100
      },
      {
        "itemid": 349,
        "itemDescription": "Jug",
        "UnitCharge": 0
      }
    ]
  },
  {
    "Description": "xyz2",
    "items": [{
        "itemid": 301,
        "itemDescription": "chair",
        "UnitCharge": 10
      },
      {
        "itemid": 382,
        "itemDescription": "table",
        "UnitCharge": 0
      }
    ]
  }
]

Я хочу применить фильтрна каждый предмет предметов.Может ли кто-нибудь помочь мне с этим

Обновлено ожидаемый результат:

[{
    "Description": "xyz",
    "items": [{
        "itemid": 319,
        "itemDescription": "bucket",
        "UnitCharge": 10
      },
      {
        "itemid": 320,
        "itemDescription": "mug",
        "UnitCharge": 100
      }
    ]
  },
  {
    "Description": "xyz2",
    "items": [{
        "itemid": 301,
        "itemDescription": "chair",
        "UnitCharge": 10
      }
    ]
  }

]

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вы можете использовать Array.reduce и Array.filter

ES6 и выше

let arr = [{"Description":"xyz","items":[{"itemid":319,"itemDescription":"bucket","UnitCharge":10},{"itemid":320,"itemDescription":"mug","UnitCharge":100},{"itemid":349,"itemDescription":"Jug","UnitCharge":0}]},{"Description":"xyz2","items":[{"itemid":301,"itemDescription":"chair","UnitCharge":10},{"itemid":382,"itemDescription":"table","UnitCharge":0}]}];

let result = arr.reduce((a,c) => [...a, ...c.items.filter(v => v.UnitCharge > 0)], []);
console.log(result);

ES5

let arr = [{"Description":"xyz","items":[{"itemid":319,"itemDescription":"bucket","UnitCharge":10},{"itemid":320,"itemDescription":"mug","UnitCharge":100},{"itemid":349,"itemDescription":"Jug","UnitCharge":0}]},{"Description":"xyz2","items":[{"itemid":301,"itemDescription":"chair","UnitCharge":10},{"itemid":382,"itemDescription":"table","UnitCharge":0}]}];

let result = arr.reduce(function(a,c){
  return a.concat(c.items.filter(function(v){
    return v.UnitCharge > 0
  }));
}, []);

console.log(result);

РЕДАКТИРОВАТЬ

let arr = [{"Description":"xyz","items":[{"itemid":319,"itemDescription":"bucket","UnitCharge":10},{"itemid":320,"itemDescription":"mug","UnitCharge":100},{"itemid":349,"itemDescription":"Jug","UnitCharge":0}]},{"Description":"xyz2","items":[{"itemid":301,"itemDescription":"chair","UnitCharge":10},{"itemid":382,"itemDescription":"table","UnitCharge":0}]}];

let result = arr.map(({items, ...rest}) => ({...rest, items:items.filter(v => v.UnitCharge > 0)}));
console.log(result);

РЕДАКТИРОВАТЬ 2

let arr = [{"Description":"xyz","items":[{"itemid":319,"itemDescription":"bucket","UnitCharge":10},{"itemid":320,"itemDescription":"mug","UnitCharge":100},{"itemid":349,"itemDescription":"Jug","UnitCharge":0}]},{"Description":"xyz2","items":[{"itemid":301,"itemDescription":"chair","UnitCharge":10},{"itemid":382,"itemDescription":"table","UnitCharge":0}]}];

let result = arr.map(({items, ...rest}) => ({...rest, items:items.filter(v => v.UnitCharge > 0)})).filter(v => v.items.length > 0);
console.log(result);
0 голосов
/ 04 октября 2018

Оба ответа выше работают нормально, но я предпочитаю использовать flatMap вместо этих дней для таких сценариев.Это интуитивно понятно и элегантно.Подвох в том, что flatMap не работает в экосистеме Microsoft, поэтому пока не поддерживается IE / Edge , но мне повезло, что большую часть времени мне не приходится его поддерживать.

array.flatMap(record => record.items.filter(item => item.UnitCharge > 0))
0 голосов
/ 04 октября 2018

var arrayObj=[{
    "Description": "xyz",
    "items": [{
        "itemid": 319,
        "itemDescription": "bucket",
        "UnitCharge": 10
      },
      {
        "itemid": 320,
        "itemDescription": "mug",
        "UnitCharge": 100
      },
      {
        "itemid": 349,
        "itemDescription": "Jug",
        "UnitCharge": 0
      }
    ]
  },
  {
    "Description": "xyz2",
    "items": [{
        "itemid": 301,
        "itemDescription": "chair",
        "UnitCharge": 10
      },
      {
        "itemid": 382,
        "itemDescription": "table",
        "UnitCharge": 0
      }
    ]
  }
];
console.log("sdd");
for (var i = 0; i < arrayObj.length; i++) {
    var item=arrayObj[i].items;
    for (var j = 0; j < item.length; j++) {
  if(item[j].UnitCharge>10) alert( item[j].UnitCharge)
    }
    //Do something
}

Попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...