由于数据量很大,我设置了数组$scope.event
大小限制,因此当它到达BufferLimit
时,从数组中删除第一项并将最新项添加到数组中。删除添加项目时,在高数据量方面使用slice
或splice
的最佳方法是什么?
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..
}
答案 0 :(得分:1)
完全取决于您的要求:
splice()
方法返回数组中已删除的项,slice()
方法返回数组中的选定元素,作为新的数组对象。 splice()
方法更改了原始数组,slice()
方法无法更改原始数组。splice()
时在数组中插入项目,但slice()
仅删除项目。答案 1 :(得分:0)
我建议使用splice,因为它会改变您正在使用的数组,而slice不会改变数组 - 它会创建一个新数组。
速度等的差异很可能是用户看不到的(除非它很大),在这种情况下拼接会更有用。
$scope.event.splice(0, 1);
此处提供更多信息;
答案 2 :(得分:0)
这取决于你的要求。在angularJs中我们总是使用数据绑定,所以它总是很好用于拼接,以便UI立即反映。但是如果你使用切片,它会返回一个新的数组,你需要再次它在范围数组中反映在UI中。我建议如果angularjs并且不依赖于相同的数组,请使用splice。