如何用原生JS将对象数组中的"na"字符串替换为undefined?
如何用原生JS将对象数组中的"na"替换为undefined?
首先看你的需求:给定一个对象数组,需要把所有值为"na"的属性替换为undefined,最终输出处理后的新数组。
你的测试数据:
const test = [ {col1: "na", col2: "string", col3: "na"}, {col1: 100, col2: "String", col3: "2019-01-01"}, {col1: 203, col2: "na", col3: "2019-01-01"} ]
期望执行console.log(naOmit(test))后得到:
[ {col1: undefined, col2: "string", col3: undefined}, {col1: 100, col2: "String", col3: "2019-01-01"}, {col1: 203, col2: undefined, col3: "2019-01-01"} ]
你之前尝试了处理嵌套数组的方法,但不知道怎么适配对象数组——其实核心思路一致,只是对象的遍历方式和数组不同而已。
解决方案:实现naOmit函数
我们可以结合Array.map()(遍历数组中的每个对象)和Object.entries()/Object.fromEntries()(处理对象的键值对)来完成这个需求:
function naOmit(arr) { // 遍历数组中的每个对象 return arr.map(obj => { // 将对象转为键值对数组,再遍历处理每个键值对 const processedEntries = Object.entries(obj).map(([key, value]) => { // 如果值是"na",替换为undefined,否则保留原值 return [key, value === "na" ? undefined : value]; }); // 将处理后的键值对数组转回对象 return Object.fromEntries(processedEntries); }); }
测试一下效果:
const test = [ {col1: "na", col2: "string", col3: "na"}, {col1: 100, col2: "String", col3: "2019-01-01"}, {col1: 203, col2: "na", col3: "2019-01-01"} ]; console.log(naOmit(test)); // 输出结果完全符合你的期望!
为什么这个方法可行?
Array.map():遍历原数组的每个对象,返回一个新数组(不会修改原数组,符合函数式编程的原则)。Object.entries(obj):把对象转换成[key, value]形式的键值对数组,这样我们就能像处理数组元素一样处理每个属性了。Object.fromEntries(processedEntries):把处理后的键值对数组重新转换成对象,得到我们需要的结构。
你之前处理嵌套数组的代码是对的,只是对象需要先转成键值对数组才能用类似的方式遍历处理,调整一下这部分逻辑就搞定啦~
内容的提问来源于stack exchange,提问作者MayaGans
相关产品推荐
相关产品推荐

