从数组中删除元素时,使用切片或拼接的更好方法是什么?

时间:2017-03-28 14:39:15

标签: javascript angularjs arrays

由于数据量很大,我设置了数组$scope.event大小限制,因此当它到达BufferLimit时,从数组中删除第一项并将最新项添加到数组中。删除添加项目时,在高数据量方面使用slicesplice的最佳方法是什么?

Ctrl.js

$scope.event = [];
    function safelyAdd(element) {
        if (totalReceived > Bufferlimit && $scope.event.length) {

            $scope.event = $scope.event.slice(1); //delete first element in $scope.event

            totalReceived -= $scope.event[0].messageSize; //total message size minus deleted message size
            console.log('totalReceivedBytes', totalReceived);
            // $scope.event =[];//reset array if max size reached..
            console.log('$scope.event', $scope.event)
        }
        console.log('$scope.event.length', $scope.event.length);

            $scope.event.push(element); //then push new item..

    }

3 个答案:

答案 0 :(得分:1)

完全取决于您的要求:

  1. splice()方法返回数组中已删除的项,slice()方法返回数组中的选定元素,作为新的数组对象。
  2. splice()方法更改了原始数组,slice()方法无法更改原始数组。
  3. 您可以在使用splice()时在数组中插入项目,但slice()仅删除项目。

答案 1 :(得分:0)

我建议使用splice,因为它会改变您正在使用的数组,而slice不会改变数组 - 它会创建一个新数组。

速度等的差异很可能是用户看不到的(除非它很大),在这种情况下拼接会更有用。

$scope.event.splice(0, 1);

此处提供更多信息;

Link

答案 2 :(得分:0)

这取决于你的要求。在angularJs中我们总是使用数据绑定,所以它总是很好用于拼接,以便UI立即反映。但是如果你使用切片,它会返回一个新的数组,你需要再次它在范围数组中反映在UI中。我建议如果angularjs并且不依赖于相同的数组,请使用splice。