Javascript 如何将JSON对象的所有空白值转换为连字符?
以下是我的回答示例:Javascript 如何将JSON对象的所有空白值转换为连字符?,javascript,Javascript,以下是我的回答示例: var jsonData1 = [{ firstName: "Sam", age: "10" }, { firstName: "John", age: "11" }, { firstName: "Jack", age: "12" }, { firstName: "Pam", age: "13" }, { firstName: "", age: "14" }, { firstName: "Mitch", age: "" }];
var jsonData1 = [{
firstName: "Sam",
age: "10"
}, {
firstName: "John",
age: "11"
}, {
firstName: "Jack",
age: "12"
}, {
firstName: "Pam",
age: "13"
}, {
firstName: "",
age: "14"
}, {
firstName: "Mitch",
age: ""
}];
我所要做的就是,在任何字段中有空白字符串的地方,将其显示为零。我想使用简单的JS,没有lodash,没有jQuery 您可以用一行代码编写:
jsonData1.forEach(o => Object.keys(o).forEach(key => o[key] === '' && (o[key] = '-')))
假设给定的数据结构,我会这样处理:
- 使用
array.forEach()
- 使用
Object.keys(person.forEach()
- 检查活塞环是否排空并更换
jsonData1.forEach(person => {
Object.keys(person).forEach(key => {
if (person[key] === "") person[key] = "-";
});
});
简单循环
for(设i=0;i由于您有一个数组,您可以简单地对其进行迭代:
for (var i=0;i<jsonData1.length;i++) {
if (jsonData1[i].age==="")
jsonData1[i].age = 0;
if (jsonData1[i].firstName==="")
jsonData1[i].firstName = "Unknown";
}
for(var i=0;i您可以使用
for…of
语句创建了一个循环,循环迭代可编辑对象,包括:内置字符串、数组、类似数组的对象(例如参数或节点列表)、TypedArray、映射、集合和用户定义的可编辑对象
var jsonData1=[{
名字:“山姆”,
年龄:“10”}{
名字:“约翰”,
年龄:“11”}{
名字:“杰克”,
年龄:“12”}{
名字:“帕姆”,
年龄:“13”}{
名字:“,
年龄:“14”}{
名字:“米奇”,
年龄:“
}];
对于(jsonData1的var p){
如果(p.firstName.trim()=“”)p.firstName=“0”;
如果(p.age.trim()=“”)p.age=“0”
}
console.log(jsonData1);
试试这个
let newData = jsonData1.forEach(function(data) {
for(ans in data) {
If(data[ans] === "") data[ans] = 0;
}
});
使用forEach
循环
var jsonData1=[
{
名字:“山姆”,
年龄:“10”
},
{
名字:“约翰”,
年龄:“11”
},
{
名字:“杰克”,
年龄:“12”
},
{
名字:“帕姆”,
年龄:“13”
},
{
名字:“,
年龄:“14”
},
{
名字:“米奇”,
年龄:“
}
];
jsonData1.forEach((e)=>{Object.keys(e).forEach((x)=>e[x]=“”?e[x]=0:false)})
console.log(jsonData1)
应该对嵌套对象执行以下操作:
const convertObj = obj => {
Object.keys(obj).forEach(key => {
if (obj[key] === '') {
obj[key] = 0
} else if (obj[key] instanceof Object) {
convertObj(obj[key])
}
})
return obj
}
样本测试:
const jsonData1 = [
{
firstName: "Mitch",
age: "",
nested_test: [
{
foo: 'bar',
age: ''
}
],
nested_object: {
foo: 'bar',
age: ''
}
}
]
结果:
[
{
"firstName": "Mitch",
"age": 0,
"nested_array": [
{
"foo": "bar",
"age": 0
}
],
"nested_object": {
"foo": "bar",
"age": 0
}
}
]
请学习。请使您的标题与描述相符。您可能希望使用jsonData1.map((x)=>{});
这不起作用-Object.keys()
接受一个对象,而不是一个函数。我想要旧的es5语法,更好地使用plain for loopsLooks!我建议使用三重等于比较,而不是双等于,以避免意外的类型强制。这不包括FirstName的情况。我恐怕这行不通-jsonData[I]。age.length是一个数字,因此永远不会等于“”.看起来好多了,虽然未知的似乎不知从何而来!当然你们都是对的,修正了,谢谢!我从.length==0'到'==''的方法时感觉不太好。我错过了第一个名字,因为将名字设置为零不符合我的想法;-)-对于一般方法,请参考其他答案。我想用旧JS风格编写just for Loops,你确定吗?我再也不用for
了-这太复杂了。但是如果你愿意的话!我想用旧语法编写,plain for Loops这有点太急迫了-你还需要替换空数组,这不是提问者想要的。我要使用普通for循环以旧语法编写吗
const jsonData1 = [
{
firstName: "Mitch",
age: "",
nested_test: [
{
foo: 'bar',
age: ''
}
],
nested_object: {
foo: 'bar',
age: ''
}
}
]
[
{
"firstName": "Mitch",
"age": 0,
"nested_array": [
{
"foo": "bar",
"age": 0
}
],
"nested_object": {
"foo": "bar",
"age": 0
}
}
]