我的问题很简单。
我正在尝试从 json 数组中删除元素。
我想知道何时删除最后一个元素以隐藏 div
。所以我检查一下是否 jsonArray.Length > 0
。
检查失败。 jsonArray.Length
未重置。即使删除所有元素后,它也始终保留添加到其中的元素数量。例如:如果添加 4 个元素,则 Length 仍为 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();
}
}
最佳答案
如果对数组使用delete
,它将用 undefined 替换“已删除”元素,但索引将保持不变。
let arr = [1, 2]
// arr.length is 2
delete arr[1]
// arr = [1, undefined], but the length is still 2
使用splice
代替
关于javascript - 从 json 数组中删除元素而不重置其长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422783/