Javascript 将字符串替换为对象数组中未定义的字符串

Javascript 将字符串替换为对象数组中未定义的字符串,javascript,Javascript,我有一个对象数组 const test = [ {col1: "na", col2: "string", col3: "na"}, {col1: 100, col2: "String", col3: "2019-01-01"}, {col1: 203, col2: "na", col3: "2019-01-01"} ] 我想使用vanilla JS创建一个函数naOmit,用未定义的字符串替换“na”: console.log(naOmit(test)) [ {col1: 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"}
]
我想使用vanilla JS创建一个函数naOmit,用未定义的字符串替换“na”:

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"}
]
已经尝试过:我尝试过使用一个适用于嵌套数组的函数,但我不确定如何将其应用于对象数组(或者这是否是正确的路径)


感谢您的帮助

您就快到了,因为对象数组从映射返回一个对象。创建一个单独的函数,该函数将接受一个值。检查该值是否为字符串,是否为
na
。如果是,则从函数返回
未定义

const测试=[{
col1:“na”,
col2:“字符串”,
col3:“不适用”
},
{
col1:100,
col2:“字符串”,
col3:“2019-01-01”
},
{
col1:203,
col2:“na”,
col3:“2019-01-01”
}
]
让newTest=test.map((项目,索引)=>{
返回{
第1栏:替换项A(第1栏项),
第2栏:替换项A(第2栏项),
col3:replaceNA(第col3项)
}
});
console.log(newTest)
函数replaceNA(val){
if(typeof val=='string'&&val.toLowerCase()=='na'){
返回未定义;
}
返回val;

}
您可以简单地循环
行的每一行,然后循环每一列,如果它是“na”,则用
未定义的
替换它

函数naOmit(x){
for(设i=0;iconsole.log(naOmit(行))
您可以
映射
数组,并在
中为..使用
来检查值是否为“na”,将其替换为
未定义的
:(如果您想修改原始值,请删除
JSON.parse(JSON.stringify())

const测试=[
{col1:“na”,col2:“string”,col3:“na”},
{col1:100,col2:“字符串”,col3:“2019-01-01”},
{col1:203,col2:“na”,col3:“2019-01-01”}
];
const result=JSON.parse(JSON.stringify(test)).map(o=>{
for(让k进入o){
如果(o[k]=“na”)o[k]=未定义;
}
返回o;
});

控制台日志(结果)如果找到需要的字符串,可以迭代对象并替换

函数替换(对象、搜索、替换){
功能iter(对象){
Object.keys(Object.forEach)(k=>{
if(object[k]&&typeof object[k]='object')返回iter(object[k]);
如果(对象[k]==搜索)对象[k]=替换;
});
}
iter(object);
}
const test=[{col1:na,col2:string,col3:na},{col1:100,col2:string,col3:2019-01-01},{col1:203,col2:na,col3:2019-01-01}]
替换(测试“不适用”,未定义);

控制台日志(测试)您可以映射数组并使用替换项

const测试=[
{col1:“na”,col2:“string”,col3:“na”},
{col1:100,col2:“字符串”,col3:“2019-01-01”},
{col1:203,col2:“na”,col3:“2019-01-01”}
]
设r=test.map(itm=>{
返回Object.entries(itm).reduce((acc,itm)=>{
acc[itm[0]]=itm[1]==“na”?未定义:itm[1]
返回acc
},itm)
})

console.log(r)
下面是排序和电源代码

const test = [{ col1: "na", col2: "string", col3: "na" },
              { col1: 100, col2: "String", col3: "2019-01-01" },
              { col1: 203, col2: "na", col3: "2019-01-01" }];

test.map((x) => {
    for(let i=0, len = Object.keys(x).length; i<len; i++) {
        x[Object.keys(x)[i]] = x[Object.keys(x)[i]] === 'na' ? undefined : x[Object.keys(x)[i]];
    }
    return x;
});
const test=[{col1:“na”,col2:“string”,col3:“na”},
{col1:100,col2:“字符串”,col3:“2019-01-01”},
{col1:203,col2:“na”,col3:“2019-01-01”};
测试映射((x)=>{

对于(设i=0,len=Object.keys(x).length;i有两种方法,第一种是变异原始数组,第二种是不变异

  • forEach()
    回调的每次迭代中,您可以改变原始对象数组,用
    未定义的
    替换
    “na”
  • const测试=[
    {col1:“na”,col2:“string”,col3:“na”},
    {col1:100,col2:“字符串”,col3:“2019-01-01”},
    {col1:203,col2:“na”,col3:“2019-01-01”}
    ];
    //变异原始数组
    函数naOmit(arr){
    arr.map((obj)=>Object.keys(obj).forEach(key=>obj[key]===“na”?obj[key]=未定义:key));
    回归试验;
    }
    
    log(naOmit(test));
    我知道这并不是你想要的,但是自从你提到

    或者这条路线是否正确

    rows = [
    ["na", "string", "na"], 
    [100, "String", "2019-01-01"],
    [203, "na", "2019-01-01"]
    ]
    
    rows.map(function(x){ return x.map(function(y){ y === "na"? undefined: y})})
    
    另外,因为我不明白为什么需要用
    未定义的属性来定义属性,而不是真正的
    未定义的属性,我想这可能会有所帮助:
    
    const test=[{col1:“na”,col2:“string”,col3:“na”},{col1:100,col2:“string”,col3:“2019-01-01”},{col1:203,col2:“na”,col3:“2019-01-01”}]
    对于(让j进入测试){
    for(让i进入测试[j]){
    如果(测试[j][i]=“na”){
    删除测试[j][i];
    }
    }
    }
    //例如:
    console.log(测试[0].col1);
    console.log(测试[0].col2);
    
    console.log(test[0].col3);
    你想要一个新的数组/对象吗?还是仅仅是一个变种?@GetOffMyLawn——数组是我试图解决问题的“我尝试过的”部分formula@Nina我想我想要一个新的对象数组(但我必须承认我对你的区别不太清楚)我喜欢这种方法,几天来我一直在尝试使用代码来扩展函数,以使用数组进行搜索-任何指针
    replace(object,[“na”,null,“-”],未定义)