在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
Creating a playlist in javascript/angular (copying array by value but setting nested objects by reference)
我正在尝试在一个角度应用程序中为音乐播放器创建一个播放列表,其中包括一个随机播放按钮。现在我对实际的随机播放功能没有问题,我正在使用费舍尔耶茨随机播放并且它工作正常。单击随机播放按钮时,我调用随机播放函数:
$scope.shuffle = function(){
$scope.shufflePlaylist = angular.copy($scope.playlist);
//// Then shuffle the array
var i = $scope.shufflePlaylist.length, t, m;
for(var i = $scope.shufflePlaylist.length - 1; i > 0; i--){
m = Math.floor(Math.random() * i);
t = $scope.shufflePlaylist[m];
$scope.shufflePlaylist[m] = $scope.shufflePlaylist[i];
$scope.shufflePlaylist[i] = t;
}
}
我创建了一个包含随机播放列表的新数组,因为我仍然需要原始播放列表,以便我可以取消随机播放。设置随机播放的播放列表时,我必须使用angular.copy
,否则原始播放列表也会被随机播放(因为随机播放只是对原始播放列表的引用)。
这就是我的问题所在,因为我正在按值复制我的数组,并且它不再以任何方式连接到原始数组,我对一个列表中的轨道(例如喜欢/不喜欢)所做的任何操作都不会发生在另一个列表中。所以我希望 2 个播放列表不通过引用连接,但每个数组中的各个对象应该通过引用连接。这可能吗?
这是一个 plunkr:http://plnkr.co/edit/a0wpSwatnDlNSBanK7HP?p=preview
angular.copy 将创建深度复制 https://docs.angularjs.org/api/ng/function/angular.copy
尝试使用数组切片复制数组:
$scope.shufflePlaylist = $scope.playlist.slice()
相关文章:
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 将ng模型设置为与变量同名,而不是引用该变量
- 使用clearInterval方法实现的是将区间变量引用设置为null,而不是
- 为什么在设置了OnPush标志的情况下,Angular2在更改检测过程中同时捕捉到引用更改和基元更改
- 如何设置javascript中引用的文档的URL
- 尝试使用会话存储;无法设置属性'登录'的未定义引用或null引用
- 将属性设置为对对象的引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- 无法设置未定义或空引用的属性“ajax已启用”
- 如何从值设置“引用”
- 使用设置选项时未引用高图表错误
- 对象引用未设置为 C# 中的对象实例
- Internet Explorer:无法设置未定义或空引用的属性“值”
- 按引用设置的数组/按值设置的数组
- 按值而不是引用设置对象
- 为慢速URL引用设置计时器/限制的任何方法
- 为什么我不能将这个元素引用设置为一个变量?
- 将引用设置为文档.位置.搜索