我的问题非常简单。
我试图从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();
}
}
答案 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();
}
}