фильтрация данных - как отфильтровать нежелательные данные в JavaScript - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть файл JSON с данными, которые мне нужно отфильтровать.

json - это пример структуры:

[{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData"},
{A:"data", C:"flightData", D:"FlightData"},
{B:"data", D:"FlightData"}]

Я использую группу по методу

 function groupBy(list, keyGetter) {
        const map = new Map();
        list.forEach((item) => {
            const key = keyGetter(item);
            const collection = map.get(key);
            if (!collection) {
                map.set(key, [item]);
            } else {
                collection.push(item);
            }
        });
        return map;
    }

Сначала я группирую по A или B в массивы

A is [[C],[D]] и B is[[C],[D]]

Однако, если данные не имеют C или D, мне нужно удалить группу, так как данные не нужны.

 for (let value of s1) {

           // A or B
          const routeGrouped = groupBy(PriceArrayFinal, route =>
                   route.FinalArrival);



            for (let origin of s3) {

          // C or D 
         const originGrouped = groupBy(routeGrouped.get(value), route =>

                     route.FirstDepartCityName);


Можно ли удалить полную группу, например, A: [ [C], [] ], если C или D отсутствуют. Если есть пустой массив, мне нужно удалить группу A или B?

EDIT: ожидаемый результат: все группы A или B имеют C и D


[{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"}] 

 [ [ [Array], [Array] ], [ [Array], [Array] ] ,[ [Array], [Array] ], [ [Array], [Array] ] ]

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Если вы хотите получить все объекты, которые имеют значение для C && D, вы можете использовать filter следующим образом:

let input=[{A:"data",C:"flightData",D:"FlightData"},{B:"data",C:"flightData",D:"FlightData"},{A:"data",C:"flightData",D:"FlightData"},{B:"data",C:"flightData"},{A:"data",C:"flightData",D:"FlightData"},{B:"data",D:"FlightData"}];

let output = input.filter(({ C, D }) => C && D);

console.log(output)
0 голосов
/ 08 апреля 2019

Используйте метод Array filter () .

const arr = [{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData"},
{A:"data", C:"flightData", D:"FlightData"},
{B:"data", D:"FlightData"}];

const result = arr.filter(a => { 
 return (a.hasOwnProperty('A') || a.hasOwnProperty('B') && a.hasOwnProperty('C') && a.hasOwnProperty('D'));
});


console.log(result);
/* Expected Output:
[{A:"data", C:"flightData", D:"FlightData"},
{B:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"},
{A:"data", C:"flightData", D:"FlightData"}] 
*/
...