在javascript中迭代对象,保留父对象
我在和一个迭代函数作斗争。我有一个目标:在javascript中迭代对象,保留父对象,javascript,node.js,loops,object,iteration,Javascript,Node.js,Loops,Object,Iteration,我在和一个迭代函数作斗争。我有一个目标: var table = { "general": { "amount": ["mandatory", "isAmount"], "order_id": ["mandatory", "isString"] }, "card": { "number": ["Regex:/^[0-9]{16}$/", "mandatory"], "expiry": {
var table = {
"general": {
"amount": ["mandatory", "isAmount"],
"order_id": ["mandatory", "isString"]
},
"card": {
"number": ["Regex:/^[0-9]{16}$/", "mandatory"],
"expiry": {
"month": ["Regex:/^[0-9]{2}$", "mandatory"],
"year": ["Regex:/^[0-9]{4}$/", "mandatory"]
},
"network": ["List:maestro|visa|mastercard|amex|jcb", "mandatory"],
"cvv": ["Regex:/^[0-9]{3,4}$/", "mandatory"]
}
}
这里的目标是能够console.log
general.amount : ["mandatory", "isAmount"]
general.order_id: ["mandatory", "isString"]
card.number: ["Regex:/^[0-9]{16}$/", "mandatory"]
card.expiry.month: ["Regex:/^[0-9]{2}$", "mandatory"]
card.expiry.year: ["Regex:/^[0-9]{4}$/", "mandatory"]
card.network: ["List:maestro|visa|mastercard|amex|jcb", "mandatory"]
card.cvv: ["Regex:/^[0-9]{3,4}$/", "mandatory"]
-->保留每个字段的父字段,并显示它们
事实上,我已经尝试了很多东西,这里是开始:
function boucle(object, parent) {
for (var key in object) {
if (object.hasOwnProperty(key)) {
var value = object[key];
if (value.length) {
console.log(parent + '.' + key);
} else {
if (parent) {
parent += "."+key;
} else {
parent = key;
}
boucle(value, parent)
}
}
}
}
我不知道该去哪里。我必须改变对象吗
提前感谢以下是解决方案:
Use this.
$.each(table,function(key1){
$.each(table[key1],function(key2){
if(table[key1][key2] instanceof Array){
console.log(key1+'.'+key2+' :'+table[key1][key2][0]+','+table[key1][key2][1]);
}else{
$.each(table[key1][key2],function(key3){
console.log(key1+'.'+key2+'.'+key3+ ' :'+table[key1][key2][key3][0]+','+table[key1][key2][key3][1]);
})
}
})
})
function boucle(obj, parent) {
for (var i in obj) {
var parent1 = (parent ? parent + '.' : '') + i;
if (obj.hasOwnProperty(i)) {
if (obj[i].length) {
console.log(parent1);
} else {
boucle(obj[i], parent1);
}
}
}
}
谢谢,但是我希望这个函数能够工作,即使初始物体的深度是4,5…100,我刚才给了你这个问题的想法。您的代码适用于第n个深度。但是你的问题解决了。