3 回答

TA贡献1772条经验 获得超5个赞
如果您只想更新原始数组,则可以使用forEach. 然后使用循环遍历每个对象的键for...in并检查它是否是一个使用数组Array.isArray()。过滤掉NA值后更新属性
const dataArr = [{a:'foo',b:[1,2,"NA","NA",3],c:["NA",6]},{a:'bar',b:["NA","NA","NA"],c:[]}];
dataArr.forEach(o => {
for (const key in o) {
if (Array.isArray(o[key]))
o[key] = o[key].filter(s => s !== "NA")
}
})
console.log(dataArr)
如果你想在不改变原始对象的情况下获得一个新数组,你可以这样使用map:
const dataArr = [{a:'foo',b:[1,2,"NA","NA",3],c:["NA",6]},{a:'bar',b:["NA","NA","NA"],c:[]}];
const newArray = dataArr.map(o => {
const newObj = {};
for (const key in o) {
if (Array.isArray(o[key]))
newObj[key] = o[key].filter(s => s !== "NA")
else
newObj[key] = o[key]
}
return newObj;
})
console.log(newArray)

TA贡献1845条经验 获得超8个赞
您可以使用嵌套map()
和filter()
首先
map()
在主阵列上使用。然后使用获取每个对象的条目
Object.entries()
然后
map()
在每个对象的条目上使用。返回值,因为它是,如果
Array.isArray
是false
否则返回阵列的滤波值。最后用于
Object.fromEntries()
制作对象。
var dataArr = [
{
a: 'foo',
b: [1, 2, "NA", "NA", 3],
c: ["NA", 6]
},
{
a: 'bar',
b: ["NA", "NA", "NA"],
c: []
}
];
const res = dataArr.map(x =>
Object.fromEntries(
Object.entries(x)
.map(([k,v]) =>
[k,Array.isArray(v) ? v.filter(b => b !== "NA") : v])
)
)
console.log(res)

TA贡献1818条经验 获得超3个赞
用于for...of对象的条目。对于每个条目,检查它是否是一个数组。如果是数组过滤器,则赋值给新对象。如果不是,则分配而不进行过滤。这不会改变原始数组。
const dataArr = [{"a":"foo","b":[1,2,"NA","NA",3],"c":["NA",6]},{"a":"bar","b":["NA","NA","NA"],"c":[]}]
const result = dataArr.map(dataObj => {
const filterObject = {};
for (const [key, val] of Object.entries(dataObj)) {
filterObject[key] = Array.isArray(val) ?
dataObj[key].filter(val => val != 'NA')
:
val;
}
return filterObject;
});
console.log(result);
添加回答
举报