Angular JS - Array.splice()导致未定义的项目

时间:2015-05-13 04:36:45

标签: javascript angularjs array-splice

美好的一天!

我正在通过使用push方法在索引0处添加对象并使用splice方法删除项目来处理我的Array。正如我已经阅读并理解的那样,当你从一个数组中拼接一个项目时,它不会给数组留下'undefined'项。问题是,当我使用我的拼接时,我正在获得一个“未定义”的项目。

以下是我添加条目的代码:

addOrRemoveRating(0,0,{
    rating : 0,
    tran_number : transaction_number,
    email : $scope.called_numbers[0].email
});

以下是我删除条目的代码:

 addOrRemoveRating(array_index,1);

,其中array_index是现有索引。

最后一部分是拼接发生的地方:

addOrRemoveRating = function(index, item, object){
    $scope.temp_called_numbers.splice(index, item, object);
}

例如,我的数组中有3个对象 - [Object,Object,Object],在删除项目后,它返回 - [Object,Object,undefined]。

代码中是否有任何遗漏或错误的内容?非常感谢任何帮助,参考或指导。

2 个答案:

答案 0 :(得分:0)

当您仅使用两个参数调用函数时,object将为undefined,因此,undefined将添加到数组中。

试试这个

$scope.temp_called_numbers.splice.apply($scope.temp_called_numbers, arguments);

JSFiddle

使用此功能,您可以利用Array.prototype.splice的varargs特性,并传递多个对象以添加到数组中。

答案 1 :(得分:0)

这不是AngularJS问题,它严格来说是Javascript。使用三个参数调用splice()将在指定位置拼接第三个参数。如果您不使用第三个参数(object),它将只删除数组中的对象。

addOrRemoveRating = function(index, item, object){
    if (object)
        $scope.temp_called_numbers.splice(index, item, object);
    else
        $scope.temp_called_numbers.splice(index, item);
}