我有object
。像这样,例如
{
startDate: 2141242141,
adress: '',
endDate: 2141242141,
billings: {
startBillingDate: 2142421421421,
endBillingDate: 2142421421421
}
amount: 100
}
我需要获取包含“Date”(或“date”)字样的所有字段,并将它们全部转换为字符串日期格式。
谁可以帮忙。
答案 0 :(得分:4)
您可以使用Object.keys()
循环访问这些属性。
并为每个property
检查其值是否为object
并使用date
包含k.match(/date/i)
字符串,因此请将其更改为date
值。否则,如果它是一个对象,则以递归方式对其属性执行相同的操作。
这就是你需要的:
function transformProperties(obj) {
Object.keys(obj).forEach(function(k) {
if ((typeof obj[k]) !== "object" && k.match(/date/i)) {
obj[k] = new Date(obj[k]);
} else if ((typeof obj[k]) == "object") {
let sub = obj[k];
transformProperties(sub);
}
});
}
<强>演示:强>
var o = {
startDate: 2141242141,
adress: '',
endDate: 2141242141,
billings: {
startBillingDate: 2142421421421,
endBillingDate: 2142421421421
},
amount: 100
};
function transformProperties(obj) {
Object.keys(obj).forEach(function(k) {
if ((typeof obj[k]) !== "object" && k.match(/date/i)) {
obj[k] = new Date(obj[k]);
} else if ((typeof obj[k]) == "object") {
let sub = obj[k];
transformProperties(sub);
}
});
}
transformProperties(o);
console.log(o);
答案 1 :(得分:0)
此递归函数应将所有日期转换为ISO字符串:
obj = convertDatesToString(obj);
function convertDatesToString(obj) {
Object.keys(obj).forEach((key) => {
if(key.toLowerCase().match(/date/)){
obj[key] = new Date(obj[key]).toISOString();
} else if (obj[key] instanceof Object) {
obj[key] = convertDatesToString(obj[key]);
}
});
return obj;
}
obj = {
startDate: 2141242141,
adress: '',
endDate: 2141242141,
billings: {
startBillingDate: 2142421421421,
endBillingDate: 2142421421421
},
amount: 100
};
obj = convertDatesToString(obj);
console.log(obj);
function convertDatesToString(obj) {
Object.keys(obj).forEach((key) => {
if(key.toLowerCase().match(/date/)){
obj[key] = new Date(obj[key]).toISOString();
} else if (obj[key] instanceof Object) {
obj[key] = convertDatesToString(obj[key]);
}
});
return obj;
}
答案 2 :(得分:0)
我会创建一个递归迭代对象属性的函数,稍后我会调用整个函数来生成整个转换:
function forEachProperty(obj, actionFn) {
Object.keys(obj).forEach(
property => {
actionFn(obj, property);
if (typeof obj[property] == "object") {
forEachProperty(obj[property], actionFn);
}
}
);
}
var obj = {
startDate: 2141242141,
adress: '',
endDate: 2141242141,
billings: {
startBillingDate: 2142421421421,
endBillingDate: 2142421421421
},
amount: 100
};
forEachProperty(obj, (obj, property) => {
if (property.toLowerCase().includes("date")) {
obj[property] = new Date(obj[property]);
}
});
console.log(JSON.stringify(obj));
&#13;