从数组javascript中删除元素

时间:2014-11-25 22:24:23

标签: javascript arrays date

我正在尝试从日期数组中删除/删除元素。但是,由于某种原因,最后一个元素没有被删除。我将在下面举一个例子:

我有一个像arr [1900-12-20,1898-12-20,1900-12-20]的日期数组;请考虑数组中的元素是日期而不是字符串。

这是我的代码 - 我的代码包含一个日期数组(input1 [0]),一个日期属性,如'2014-09-30'(input1 [1]),并返回一个日期数组(output1)

var DobArr = input1[0];
var passedInDt = input1[1];
var prt_year = 0;
var ageInYears = 0;

//Get year for valuation date
valYear = passedInDt.getFullYear();

for (i=0; i<DobArr.length; i++){

    prt_year = DobArr[i].getFullYear();
    ageInYears = valYear - prt_year;

    if (ageInYears >= 110){
    removeByIndex(DobArr, i);
 }
}
output1 = DobArr;

function removeByIndex(arr, index) {
  arr.splice(index, 1);
}

所以代码的作用是检查ageInYears&gt; = 110,如果是,那么我想从数组中删除元素。

让我在这里给出一个附注,Oracle产品将调用此脚本,而input1 [0]是一个日期元素数组。 Oracle产品中的input1 [0]看起来像input1 [0] = {1900-12-20} {1898-12-20} {1900-12-20}

运行我的代码后,DobArr应为空,而它的值为{1898-12-20} ...为什么?所有元素都通过ageInYears&gt; = 110,为什么我还剩下一个元素?我很迷惑。 splice函数应该从数组中完全删除元素。请提前帮助和感谢。

谢谢,

3 个答案:

答案 0 :(得分:1)

通过索引删除一个元素 - 所有索引都在一个位置移动 ...重复几次,你会发现循环索引(在这种情况下是i)正在移动旧索引计数,而当前索引计数已经更改。所以你需要做的就是更新 i 变量:

if (ageInYears >= 110)
{
    removeByIndex(DobArr, i); i--;
}

答案 1 :(得分:0)

首先要删除的搜索元素:

var numArray = [2,3,5,6];
var index = numArray.indexOf(5);;

现在;使用splice()方法:

if (index > -1) {
 array.splice(index, 1);
}

答案 2 :(得分:-1)

splice方法返回一个数组,因此您必须返回arr.splice(index, 1)并将DobArr重新分配给removeByIndex(DobArr, i)