Первоначально массив $scope.distinctCourseUsers
будет пустым, после каждого динамического c нового ответа я добавляю все объекты в предыдущий список, включая новый набор объектов, а затем удаляю дубликаты массива с помощью метода Reduce и сохранение обратно в $scope.distinctCourseUsers
$scope.courseUsers = response;
Array.prototype.push.apply($scope.distinctCourseUsers,response);
distinctCourseUsers = result = $scope.distinctCourseUsers.reduce((unique, o) => {
if(!unique.some(obj => obj.Id === o.Id )) {
unique.push(o);
}
return unique;
},[]);
$scope.courseUsers = response;
Для ответа I два новых объекта массива будут сохранены в $scope.courseUsers
console.log($scope.courseUsers);
(2) [{…}, {…}]
0: {Id: 22410, Name: "test01", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
1: {Id: 22411, Name: "test02", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
Слияние пустых $scope.distinctCourseUsers
массив с ответом, хранящимся в $scope.courseUsers
Array.prototype.push.apply($scope.distinctCourseUsers,response);
console.log($scope.distinctCourseUsers);
Для ответа II появятся два новых объекта, поэтому добавление предыдущего списка массивов (2) + (новый список массивов (2) + предыдущий список массивов) (4)) Всего (2 + 2 + 4 = 6) в список $scope.distinctCourseUsers
массив
(4) [{…}, {…}, {…}, {…}]
0: {Id: 22410, Name: "test01", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
1: {Id: 22411, Name: "test02", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
2: {Id: 22410, Name: "test01", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
3: {Id: 22411, Name: "test02", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
4: {Id: 22412, Name: "test03", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
5: {Id: 22413, Name: "test04", RoleType: "End user", IsEnrolled: false, EnrolledOn: "", …}
// The below reduce opertator will eliminate all the redundant objects
distinctCourseUsers = result = $scope.distinctCourseUsers.reduce((unique, o) => {
if(!unique.some(obj => obj.Id === o.Id )) {
unique.push(o);
}
return unique;
},[]);
console.log(distinctCourseUsers);
Фактический и ожидаемый результат:
0: {Id: 22410, Name: "test01", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
1: {Id: 22411, Name: "test02", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
2: {Id: 22412, Name: "test03", RoleType: "XL Teacher", IsEnrolled: false, EnrolledOn: "", …}
3: {Id: 22413, Name: "test04", RoleType: "End user", IsEnrolled: false, EnrolledOn: "", …}
Приведенный выше подход неэффективен из-за снижения производительности, связанного с добавлением предыдущего списка объектов. Можно ли устранить дубликат в первом месте, указанном в приведенном ниже коде
Array.prototype.push.apply($scope.distinctCourseUsers,response);
Как бы вы сократили код, чтобы сделать его достаточно эффективным, чтобы получить вышеуказанный результат?