【发布时间】:2020-08-11 02:57:06
【问题描述】:
最初数组 $scope.distinctCourseUsers 将为空,在每个动态新响应之后,我会将所有对象附加到前一个列表中,包括新的对象集
然后使用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 响应将有两个新对象,因此将先前的 Array List(2) + (New Array List(2) + Previous Array List(4)) Totally (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);
您将如何减少代码以使其足够高效以获得上述结果?
【问题讨论】:
标签: javascript jquery ecmascript-6 ecmascript-2016