我正在尝试在 Angular 应用程序中为音乐播放器创建一个播放列表,其中将包含一个随机播放按钮。现在我对实际的随机播放功能没有问题,我正在使用 Fisher Yates Shuffle并且运行良好。单击随机播放按钮时,我调用随机播放函数:
$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 ,否则原始播放列表也会被随机播放(因为随机播放列表只是对原始播放列表的引用)。
这就是我的问题,因为我正在按值复制数组,并且它不再以任何方式连接到原始数组,所以我在 1 个列表中的轨道上执行的任何操作(例如类似/不类似)都不会发生在另一个。所以我希望 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 - 在 javascript/Angular 中创建播放列表(按值复制数组,但按引用设置嵌套对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36913140/