You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用jQuery删除JSON数组元素后如何避免出现null值?

解决数组删除元素后出现null的问题

这问题我之前踩过坑!用delete操作数组元素确实会留下空位,因为它本质上是删除对象的属性(数组也是特殊的对象),并不会改变数组的长度,所以那个被删的位置就变成了空位,后续处理时会显示为null。给你几个实用的解决办法:

方法一:使用filter()(最推荐,简洁直观)

filter()会创建一个新数组,只包含符合条件的元素,直接过滤掉你想删除的项,完全不会留下空位:

var json_obj = [{"id":"7","a_id":0,"cost":"Real Cost","desc":"this a value","minage":0,"maxage":""}, {"id":"10","a_id":0,"cost":"Real Cost","desc":"other","minage":0,"maxage":""}, {"id":"13","a_id":0,"cost":"Real Cost","desc":"other","minage":0,"maxage":""}];

// 过滤掉id为"13"的元素(注意原数据id是字符串类型,要匹配一致)
json_obj = json_obj.filter(item => item.id !== "13");

执行后json_obj就是干净的数组:

[{"id":"7","a_id":0,"cost":"Real Cost","desc":"this a value","minage":0,"maxage":""}, {"id":"10","a_id":0,"cost":"Real Cost","desc":"other","minage":0,"maxage":""}]

方法二:使用splice()(直接修改原数组)

如果你需要在原数组上直接修改,先找到目标元素的索引,再用splice()删除(注意要倒序遍历,避免因数组长度变化跳过元素):

var json_obj = [{"id":"7","a_id":0,"cost":"Real Cost","desc":"this a value","minage":0,"maxage":""}, {"id":"10","a_id":0,"cost":"Real Cost","desc":"other","minage":0,"maxage":""}, {"id":"13","a_id":0,"cost":"Real Cost","desc":"other","minage":0,"maxage":""}];

// 倒序遍历数组
for (let i = json_obj.length - 1; i >= 0; i--) {
  if (json_obj[i].id === "13") {
    json_obj.splice(i, 1); // 从索引i处删除1个元素
    break; // 如果只有一个id=13的元素,找到后直接退出循环即可
  }
}

这样原数组就会直接被修改,不会留下null

为什么原来的方法会出现null?

delete json_obj[i]只是删除了数组对象的第i个属性,数组的length属性并不会改变,所以数组的第三个位置会变成一个“空位”。当你序列化或者遍历这个数组时,空位就会被显示为null,这就是问题的根源。

内容的提问来源于stack exchange,提问作者roche

火山引擎 最新活动