我正在尝试从日期数组中删除/删除元素。但是,由于某种原因,最后一个元素没有被删除。我将在下面举一个例子:
我有一个像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函数应该从数组中完全删除元素。请提前帮助和感谢。
谢谢,
答案 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)
。