gpt4 book ai didi

javascript - 如何在对象数组上使用 Array.prototype.map() 来根据它的值过滤掉一些特定的键?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:22 26 4
gpt4 key购买 nike

我有以下对象数组,其中一些特定键的值可以是字符串或数组。我想按原样获取具有字符串值的键,并从具有数组值的键中删除“NA”。

我试图通过对数组执行 .map 方法来实现相同的目的,检查数据对象中每个键值的类型,如果是数组,则使用 .filter 删除“NA”值。

var dataArr = [
{
a: 'foo',
b: [1, 2, "NA", "NA", 3],
c: ["NA", 6]
},
{
a: 'bar',
b: ["NA", "NA", "NA"],
c: []
}
];
dataArr.map(dataObj => {
for (let key in dataObj) {
if (key !== 'a')
dataObj[key] = dataObj[key].filter(val => { if(val != "NA") return val})
}
return dataObj;
});

上面的代码块按预期工作,但我想要一个更好的、面向 future 的解决方案。而且,这看起来也很糟糕。

最佳答案

如果您只想更新原始数组,您可以使用 forEach 遍历数组。然后使用 for...in 遍历每个对象的键并使用 Array.isArray() 检查它是否是一个数组.在 filtering 之后更新属性输出 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)

关于javascript - 如何在对象数组上使用 Array.prototype.map() 来根据它的值过滤掉一些特定的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56322529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com