javascript - array.slice() 如果我从 0 以外的任何地方开始,它就无法运行

标签 javascript angularjs arrays pagination

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

请不要评论说我应该为 angularjs 使用 bootstrap 分页,我自己制作了它并且它做了我需要它做的事情。

$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"
      }
    ];

我有一个名为 $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;
        }



    };

($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;
}

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

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

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

我错过了什么?

最佳答案

$scope.results.slice(4, 4) returns an empty array. (e.g. [])

根据 documentation

Zero-based index before which to end extraction. slice extracts up to but not including end.

For example, slice(1,4) extracts the second element through the fourth element (elements indexed 1, 2, and 3).

因此,从 44 应该只有 0

你需要尝试

var startIndex = $scope.currentPage * $scope.pageSize;
var endIndex = ($scope.currentPage * $scope.pageSize) + $scope.pageSize;
$scope.resultsToDelete = $scope.results.slice( startIndex, endIndex );

关于javascript - array.slice() 如果我从 0 以外的任何地方开始,它就无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43304954/

相关文章:

javascript - 使用带有十六进制编码的 crypto-js 加密字符串以使其 url 友好

javascript - 如何在 AngularJS 中访问 Router UI Controller 中的主 Controller 变量?

javascript - 使用 Angular ui路由器的多步表单

python - Cython:创建数组抛出 "not allowed in a constant expression"

java - 内存效率: HashMap versus Array

javascript - JSON Javascript 对象属性返回未定义,尽管对象的日志显示它存在

javascript - 通过按下按钮更新条形图

javascript - 如何将 jSTL/JSP 变量转换为 javascript 变量?

javascript - 如何使用 AngularJS 观察本地存储的变化

javascript - 在 JavaScript 中解析一个 JSON 对象生成一个数组