如何在对象数组中省略值为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
相关产品推荐
相关产品推荐

