我在JavaScript中有一个数组数组,用于存储一些值,当用户从页面中删除指定的控件时,我试图寻找一种方法来清除该数组中的值,但是我我没有找到执行此操作的好方法,而我尝试的任何操作似乎都无效。
清除数组中值的最佳方法是什么?我希望该值为null,以便稍后在数组上进行迭代时将其跳过。
我尝试做MyArray[id][subid] = ''
,但从技术上来说还是很有价值的。我也尝试过做MyArray[id][subid].length = 0
,但这似乎也没有任何作用。尝试获取索引并将其从数组中拼接出来将返回-1,因此也不起作用。
var MyArray;
window.onload = function(){
MyArray = new Array();
}
function EditValuesAdd(){
var Input = document.getElementById('Values-Input').value;
var ID = document.getElementById('FID').value;
var ValueID = ControlID(); // generate GUID
if (!MyArray[ID]) MyArray[ID] = new Array();
MyArray[ID][ValueID] = Input;
document.getElementById('Values').innerHTML += '<a href="#" id="FV-' + ValueID + '" onclick="EditValuesRemove(this.id)"/><br id="V-' + ValueID + '"/>';
}
function EditValuesRemove(id)
{
var ID = document.getElementById('FID').value;
document.getElementById(id).remove();
document.getElementById(id.replace('FV-', 'V-')).remove();
MyArray[ID][id.replace('FV-', '')] = '';
}
我还尝试对索引进行索引,然后从基础数组中将其拼接起来,但是索引始终返回-1。
var Index = MyArray[ID].indexOf(id.replace('FV-', ''));
MyArray[ID].splice(Index, 1);
将长度设置为零也不起作用。
MyArray[ID][id.replace('FV-', '')].length = 0;
我希望上面的一种方法可以清除该值并将其设置为null,以便稍后将其跳过,但是到目前为止,我发现并尝试过的所有方法都会留下一些非null的值。
答案 0 :(得分:1)
您需要的是一个对象(一个Map),而不是一个数组(一个列表)。
这是如何做的基本想法:
MyArray = {};
....
if (!MyArray[ID]) MyArray[ID] = {}
MyArray[ID][ValueID] = Input;
...
delete MyArray[ID][id.replace('FV-', '')];
在此处查看更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
答案 1 :(得分:0)
最后,我使用了一个对象数组MyArray = []
,然后使用splice / findindex将其从数组中删除:
function RemoveItem(id)
{
var Index = MyArray.findIndex(a => a.ID == id.replace('FV-', ''));
MyArray.splice(Index, 1);
document.getElementById(id).remove();
document.getElementById('FVB-' + id.replace('FV-', '')).remove();
}
它不能解决实际提出的问题,但是我不知道是否真的有答案,因为我以错误的方式使用了数组。希望这至少可以使其他人在处理数组和对象时指向正确的方向。