如果 array.slice() 从 0 以外的任何位置开始,则它不起作用

Mar*_*nov 2 javascript arrays pagination angularjs

我有一个名为 的数组中的 8 个对象的列表$scope.results,我还有一个selectAll()函数,我目前正在尝试使用我的自定义简单分页。

请不要评论说我应该使用 angularjs 的引导分页,我自己做了它,它做了我需要它做的事情。

$scope.results = [
      {
        "devID": "1",
        "devName": "item 1",
        "desc": "sample desc"
      },
      {
        "devID": "2",
        "devName": "item 2",
        "desc": "sample desc"
      },
      {
        "devID": "3",
        "devName": "item 3",
        "desc": "sample desc"
      },
      {
        "devID": "4",
        "devName": "item 4",
        "desc": "sample desc"
      },
      {
        "devID": "5",
        "devName": "item 5",
        "desc": "sample desc"
      },
      {
        "devID": "6",
        "devName": "item 6",
        "desc": "sample desc"
      },
      {
        "devID": "7",
        "devName": "item 7",
        "desc": "sample desc"
      },
      {
        "devID": "8",
        "devName": "item 8",
        "desc": "sample desc"
      }
    ];
Run Code Online (Sandbox Code Playgroud)

我有一个名为 的空对象$scope.deleteList = {},其中selectAll()填充了 ID。

这是我的$scope.selectAll()(添加了控制台日志供我查看发生了什么):

    $scope.selectAll = function(){


        $scope.resultsToDelete = $scope.results.slice(($scope.currentPage * $scope.pageSize), $scope.pageSize);
        console.log("$scope.results:", $scope.results);
        console.log("$scope.currentPage:", $scope.currentPage);
        console.log("$scope.pageSize:", $scope.pageSize);
        console.log("$scope.currentPage * $scope.pageSize:", ($scope.currentPage * $scope.pageSize));


        for (var i = 0; i < $scope.resultsToDelete.length; i++) {
            var item = $scope.resultsToDelete[i]; 
            $scope.devDelList[item.devID] = true;
        }



    };
Run Code Online (Sandbox Code Playgroud)

($scope.currentPage * $scope.pageSize)为我提供列表下一页上第一个对象的索引。

这是我的分页:

    $scope.pagination = function(itemList) {
        $scope.currentPage = 0;
        $scope.pageSize = 4;
        $scope.numOfPages = Math.ceil(itemList.length / $scope.pageSize);
        $scope.pageNumbersArray = [];

        for (var i = 0; i <= $scope.numOfPages -1 ; i++) {
            $scope.pageNumbersArray.push(i);
        }
    }($scope.results)



$scope.prev = function() {
    if ($scope.currentPage > 0) {
        $scope.currentPage = -- $scope.currentPage;
    }
}

$scope.next = function() {
    if ($scope.currentPage < $scope.numOfPages - 1 ) {
        $scope.currentPage = ++ $scope.currentPage;
    }
}

$scope.goToPage = function(pageNum) {
    $scope.currentPage = pageNum;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是.slice()结果数组上的。它仅适用于第一页 - 当$scope.currentPage = 0. 一旦$scope.currentPage = 1, $scope.results.slice() 返回一个空数组。

$scope.results.slice(0, 4) 返回 4 个项目的第一页的正确 ID。

$scope.results.slice(4, 4) 返回一个空数组。(例如 []),它不返回第二组 4 项

我缺少什么?

gur*_*372 6

$scope.results.slice(4, 4) 返回一个空数组。(例如[])

根据文档

从零开始的索引,在该索引之前结束提取。切片提取到但不包括末尾。

例如,slice(1,4) 提取第二个元素到第四个元素(索引为 1、2 和 3 的元素)。

所以,从44应该只是0

你需要尝试

var startIndex = $scope.currentPage * $scope.pageSize;
var endIndex = ($scope.currentPage * $scope.pageSize) + $scope.pageSize;
$scope.resultsToDelete = $scope.results.slice( startIndex, endIndex );
Run Code Online (Sandbox Code Playgroud)