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;i console.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,“-”],未定义)