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

标签 javascript arrays angularjs object

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

相关文章:

javascript - 无法弄清楚如何正确断言对象

C 在 void 函数之后由指针发送的数组的值被修改

python - 将 numpy 数组中的整数转换为连续范围 0...n

AngularJS - $scope.value 的重置不会改变模板中的值(随机行为)

angularjs - phonegap/ionic - 单击功能内的 $scope 未更新

javascript - 如何以 Angular 方式将更新的对象从服务发送到指令 Controller 函数?

javascript - 从函数返回不可变数组/对象 - JavaScript

javascript - 黑莓浏览器 Javascript 时间 DST 问题

javascript - 选择元素中的可排序 native 选项

python - 如何将 C 数组返回给 Python?