You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在对象数组中省略值为NULL的start_time和end_time键?

问题描述

我有如下对象数组:

[
  {
    "name": "Homer Simpson",
    "age": "43",
    "start_time": null,
    "end_time": null
  },
  {
    "name": "Bart Simpson",
    "age": "14",
    "start_time": "2023-11-10T20:08:10Z",
    "end_time": "2023-11-10T20:08:10Z"
  }
];

希望将每个对象中值为null的start_time和end_time键省略,得到如下目标数组:

[
  {
    "name": "Homer Simpson",
    "age": "43"
  },
  {
    "name": "Bart Simpson",
    "age": "14",
    "start_time": "2023-11-10T20:08:10Z",
    "end_time": "2023-11-10T20:08:10Z"
  }
];

我知道可以通过循环对象并推入新数组实现,但有没有更简洁的方式?能否使用Array.filter?

解决方案

先搞清楚:Array.filter的作用是过滤数组里的整个元素——也就是决定某个数组项要不要留在数组里,不是用来处理单个对象内部属性的,所以没法直接用它来删掉对象里值为null的属性。

下面是几种简洁的实现方式:

方法1:针对指定属性处理(直观清晰)

专门针对start_time和end_time两个属性做判断,逻辑一目了然:

const originalArray = [/* 你的原始数组 */];
const result = originalArray.map(({ name, age, start_time, end_time }) => {
  const obj = { name, age };
  if (start_time !== null) obj.start_time = start_time;
  if (end_time !== null) obj.end_time = end_time;
  return obj;
});

方法2:通用过滤所有null属性(灵活扩展)

如果后续需要过滤对象中所有值为null的属性,用这种方法更灵活:

const originalArray = [/* 你的原始数组 */];
const result = originalArray.map(item => 
  Object.fromEntries(
    Object.entries(item).filter(([key, value]) => value !== null)
  )
);

思路是先把对象转成键值对数组,过滤掉值为null的项,再转回对象,最后用map遍历整个数组完成批量处理。

方法3:仅过滤指定属性的null值(精准控制)

如果只想处理start_time和end_time,其他属性哪怕值为null也保留,可以给过滤逻辑加键名限制:

const originalArray = [/* 你的原始数组 */];
const result = originalArray.map(item => 
  Object.fromEntries(
    Object.entries(item).filter(([key, value]) => 
      !['start_time', 'end_time'].includes(key) || value !== null
    )
  )
);

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:23:10