gpt4 book ai didi

javascript - 在 javascript/Angular 中创建播放列表(按值复制数组,但按引用设置嵌套对象)

转载 作者:行者123 更新时间:2023-12-02 14:42:20 26 4
gpt4 key购买 nike

我正在尝试在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com