删除对象而不导致null



我有以下函数,它需要遍历一个极其复杂的json文件。这个json文件进出数组和对象:

removeRecords(data, id)
{
let k;
for (k of Object.keys(data)) {
if ((data[k] != null))
{
if ((data[k].hasOwnProperty('type')) && (data[k].hasOwnProperty('characterId')))
{
if ((data[k].type == "enableEscortingItem") || (data[k].type == "disableEscortingItem"))
{
if ((data[k].param1 == id))
{
delete data[k];
}
}
}
else
{
if ((typeof data[k] != 'string'))
{
this.removeRecords(data[k], id);
}
}
}
}
}

但是当我delete并且它正在从数组中移除一个对象时,我得到:[null],而我想要[](当然,如果它是数组中唯一的对象(。我知道合适的方法是使用splice,但我不能使用它,因为我不知道那时我是否会在阵列中。我还尝试过使用.pop().shift()

是的,当您从数组中删除一个项时,它将变为null,而不是旧值。如果您想用其他东西替换null,请使用Array.map方法。如果要从数组中丢弃元素,请使用array.filter。如果您想创建全新的数据类型而不是数组(字符串、数字、对象等(,请使用array.reduce

最新更新