JavaScript清除数组值

时间:2019-05-15 12:24:28

标签: javascript arrays

我在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的值。

2 个答案:

答案 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();
}

它不能解决实际提出的问题,但是我不知道是否真的有答案,因为我以错误的方式使用了数组。希望这至少可以使其他人在处理数组和对象时指向正确的方向。