从json数组中删除元素而不重置其长度

时间:2016-11-04 12:33:16

标签: javascript arrays json

我的问题非常简单。 我试图从json数组中删除元素。 我想知道何时删除最后一个元素以隐藏div。所以我检查一下是否jsonArray.Length > 0。 检查失败了。 jsonArray.Length没有重置。即使删除了所有元素,它也始终保留添加到其中的元素数量。例如:如果添加了4个元素,则长度保持为4。

我将发布以下代码。

初始化程序:

var ccount = 1;
var tasks = []

将元素插入JSON数组:

function insertTask() {
        var out = '<div id="' + ccount + '" ><span style=" width:40px; display: inline-block; vertical-align: top; text-align:left;"><img src="../Images/iconrequestreport1.png" /></span><span style="width:160px; display: inline-block; vertical-align: top; text-align: left; font-family:Arial; font-size:small;"><div>' +
                $('#drpTrajectory').find(":selected").text() + '</div><div>Start Time: ' +
                $('#txtStartTime').val() + '</div><div>End Time: ' +
                $('#txtEndTime').val() + '</div><div>Aggregation: ' +
                $('#drpAggrInterval').find(":selected").text() +
                '</div></span><span style="width:40px; display: inline-block; vertical-align: top;"><input id="btn' + ccount +
                '" class="btnDelete" type="button" onclick="deleteTask(' + ccount + ')"/></span></div> ';
        $('#divTravelTime').append(out);
        var obj = { TaskId: ccount, TrajectoryName: $('#drpTrajectory').find(":selected").text(), StartTime: $('#txtStartTime').val(), EndTime: $('#txtEndTime').val(), Aggregation: $('#drpAggrInterval').find(":selected").text() }
tasks.push(obj)

ccount++;
$('#divTravelTimeHeader').show();
$('#divTravelTime').show();
$('#divJobSubmit').show();

if (tasks.length > 0) {
    $('#divTaskView').show();
}
else {
    $('#divTaskView').hide();
}

从JSON数组中删除项目的代码:

function deleteTask(tt) {
    var remID = "#" + tt;
    $(remID).remove();
    delete tasks[tt - 1];
    if (tasks.length > 0) {
        $('#divTaskView').show();
    }
    else {
        $('#divTaskView').hide();
    }
}

2 个答案:

答案 0 :(得分:1)

如果对数组使用delete,它将用undefined替换“deleted”元素,但索引将保持不变。

let arr = [1, 2]
// arr.length is 2
delete arr[1]
// arr = [1, undefined], but the length is still 2

使用splice代替

答案 1 :(得分:0)

试试这个:

更新: 现在检查一下,splice方法从指定的索引中删除数组中的其余元素。

function deleteTask(tt) {
    var remID = "#" + tt;
    $(remID).remove();

    //delete tasks[tt - 1];
    tasks.splice(tt-1);

    if (tasks.length > 0) {
        $('#divTaskView').show();
    }
    else {
        $('#divTaskView').hide();
    }
}

从JSON数组中删除项目的代码:

function deleteTask(tt) {
    var remID = "#" + tt;
    $(remID).remove();

    //delete tasks[tt - 1];
    tasks = tasks.splice(tt-1 , 1);

    if (tasks.length > 0) {
        $('#divTaskView').show();
    }
    else {
        $('#divTaskView').hide();
    }
}