фильтрация многомерного объекта в javascript - PullRequest
0 голосов
/ 12 июля 2020

У меня есть один ответ JSON, в котором я хочу сопоставить синхронизируемое значение с каждым идентификатором пользователя, чтобы получить количество пользователей, для которых синхронизация является ложной, и количество пользователей, для которых синхронизация является истинной. Если какой-либо пользователь имеет синхронизированное значение false при любом действии, результат должен быть false, иначе true. Также не обязательно, чтобы все пользователи были там под каждым действием

Объект JSON выглядит следующим образом:

[
   {
      "activityId":"302ce18c-d856-4c6a-b61c-69d5ff058c3d",
      "lmsActivityIdentifier":"27292821",
      "name":"test",
      "totalPoints":6.0,
      "lmsUserGrades":[
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991111",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":4.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"46aa19a1-5e0f-4dbf-a0bc-e7bcef46a703",
      "lmsActivityIdentifier":"27292852",
      "name":"Session1",
      "totalPoints":1.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":0.5,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"1f5b78b6-14df-4734-a57a-bcb84a774abf",
      "lmsActivityIdentifier":"27292849",
      "name":"Session2",
      "totalPoints":2.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":35.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"e5d541e6-d373-44c3-a665-15337026bd0e",
      "lmsActivityIdentifier":"27292850",
      "name":"Session3",
      "totalPoints":10.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":5.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":4.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"a9d09f86-d74c-4868-a2cf-ec80584cfba7",
      "lmsActivityIdentifier":"27292848",
      "name":"Session4",
      "totalPoints":3.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   }
]

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

# количество синхронизированных пользователей: 0

# количество пользователей, не синхронизированных: 5

Ответы [ 3 ]

0 голосов
/ 12 июля 2020

Другой способ

отредактировано: для устранения некоторых ошибок

const SESSIONS = [
   {
      "activityId":"302ce18c-d856-4c6a-b61c-69d5ff058c3d",
      "lmsActivityIdentifier":"27292821",
      "name":"test",
      "totalPoints":6.0,
      "lmsUserGrades":[
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991111",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":4.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"46aa19a1-5e0f-4dbf-a0bc-e7bcef46a703",
      "lmsActivityIdentifier":"27292852",
      "name":"Session1",
      "totalPoints":1.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":0.5,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"1f5b78b6-14df-4734-a57a-bcb84a774abf",
      "lmsActivityIdentifier":"27292849",
      "name":"Session2",
      "totalPoints":2.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":35.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"e5d541e6-d373-44c3-a665-15337026bd0e",
      "lmsActivityIdentifier":"27292850",
      "name":"Session3",
      "totalPoints":10.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":5.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":4.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"a9d09f86-d74c-4868-a2cf-ec80584cfba7",
      "lmsActivityIdentifier":"27292848",
      "name":"Session4",
      "totalPoints":3.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   }
]

let synced = 0;
let notSynced = 0;

const syncedOrNot = () => {
  SESSIONS.map((session) => {
    return session.lmsUserGrades.length !== (synced + notSynced) ? (session.lmsUserGrades.map(user => user.synced ? synced++ : notSynced++))
    : (synced = 0, notSynced = 0)
  })
}

syncedOrNot()
console.log(`synced : ${synced} - not synced : ${notSynced}`)
0 голосов
/ 12 июля 2020

Выглядит как классическая c проблема CS. Этого можно добиться множеством разных способов.

Единственная деталь, на которую следует обратить внимание, - Если какой-либо пользователь имеет синхронизированное значение false при любом действии, результат должен быть ложным, иначе истинным. Также не обязательно, чтобы все пользователи были там под каждым действием

Можно просто использовать базовый вариант использования c хэш-карты Попробуйте:

    let users = new Map()
    
    for (const activity in activities) {
      for (const grades in activity.lmsUserGrades) {
         // You mentioned false should overwrite for users with true values
      if (users.has(grade.userId) && grade.synced === false) {
        users.set(grade.userId, false)
      } else { 
            users.set(grade.userId, grade.synced)
     }
    }
    
    let syncedUsers = 0
    let unSyncedUsers = 0
    for (let synced of users.values()){
    synced ? syncedUsers++ : unSyncedUsers++
}
0 голосов
/ 12 июля 2020

Попробуйте:

const countSynced = (activities) => {
  let res = {
    synced: 0,
    nonSynced: 0,
  };
  for (const activity of activities){
    for (const user of activity.lmsUserGrades){
      if (user.synced) res.synced++
      else res.nonSynced++;

    }
  }
  return res;
}

const data = [
   {
      "activityId":"302ce18c-d856-4c6a-b61c-69d5ff058c3d",
      "lmsActivityIdentifier":"27292821",
      "name":"test",
      "totalPoints":6.0,
      "lmsUserGrades":[
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991111",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":4.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":3.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"46aa19a1-5e0f-4dbf-a0bc-e7bcef46a703",
      "lmsActivityIdentifier":"27292852",
      "name":"Session1",
      "totalPoints":1.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":true,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":0.5,
            "synced":true,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":0.0,
            "synced":true,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"1f5b78b6-14df-4734-a57a-bcb84a774abf",
      "lmsActivityIdentifier":"27292849",
      "name":"Session2",
      "totalPoints":2.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":35.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":0.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"e5d541e6-d373-44c3-a665-15337026bd0e",
      "lmsActivityIdentifier":"27292850",
      "name":"Session3",
      "totalPoints":10.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":5.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":4.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":8.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   },
   {
      "activityId":"a9d09f86-d74c-4868-a2cf-ec80584cfba7",
      "lmsActivityIdentifier":"27292848",
      "name":"Session4",
      "totalPoints":3.0,
      "lmsUserGrades":[
         {
            "userId":"4ed71a4f-6ae1-4218-b122-f4e9eeefc03f",
            "lmsUserIdentifier":"9991863",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"1cee27a4-91e3-4975-a1d8-b31ece79db10",
            "lmsUserIdentifier":"9991865",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"a8fcb57a-0f59-4104-a18d-d185eb003c0c",
            "lmsUserIdentifier":"9991862",
            "totalPoints":1.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"54400abe-b25d-45fe-b77c-e1a0b90f0c86",
            "lmsUserIdentifier":"9991864",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         },
         {
            "userId":"05afc973-37fe-4b6c-84ac-26b8c8255988",
            "lmsUserIdentifier":"9991861",
            "totalPoints":2.0,
            "synced":false,
            "version":1
         }
      ],
      "version":1
   }
];

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