Javascript 遍历嵌套对象';使用ES5或lodash展平阵列中的属性
我有一个与Javascript 遍历嵌套对象';使用ES5或lodash展平阵列中的属性,javascript,arrays,nested-loops,Javascript,Arrays,Nested Loops,我有一个与map属性相关的keys属性。键的长度与每个贴图属性的级别深度相对应。在这种情况下,只有两个级别。 如果我将另一个条目添加到键,则每个贴图属性将更深一层 以下是数据 { keys: [ "vendorApNbr", "type" ], map: { _default: { <-** 1st level _default:
map
属性相关的keys
属性。键的长度
与每个贴图属性的级别深度相对应。在这种情况下,只有两个级别。
如果我将另一个条目添加到键
,则每个贴图属性将更深一层
以下是数据
{
keys: [
"vendorApNbr",
"type"
],
map: {
_default: { <-** 1st level
_default: "'100026'", <-** 2nd level
PT_CC: "'120035'", <-** 2nd level
PT_DC: "'120037'"
},
A-00: { <- ** 1st level
_default: "'120037'" <- ** 2nd level
},
A-01: {
_default: "'120035'"
},
A-02: {
_default: "'120035'"
},
A-03: {
_default: "'120036'"
},
A-04: {
_default: "'100024'"
}
}
}
我只限于ES5或lodash。我正在考虑递归,但不确定如何实现。任何建议都有帮助
编辑
另外,要想将数组形式转换回嵌套对象形式,可以使用
下面的代码是从中提取的示例。这里的不同之处在于将每个键连接在一起,但是您可以使用相同的算法进行一些修改以获得一个列表
var obj={
巴兹:{
傅:{
酒吧:“5”
},
地狱:{
罪:“0”
}
},
a:{
b:“1”
}
};
var hash={};
var-str='';
var dfs=功能(obj、str){
for(obj中的var键){
if(对象hasOwnProperty(键)){
如果(对象的类型[键]='string')
hash[str+key]=obj[key];
否则{
dfs(obj[key],str+key+');
}
}
}
};
dfs(obj,str);
console.log(散列);
这个怎么样?它不关心对象嵌套的数量和级别。此外,每个深度可能不同
var obj={
“_默认值”:{
“_default”:“100026”,
“PT_CC”:“120035”,
“PT_DC”:“120037”
},
“A-00”:{
“_默认值”:“120037”
},
“A-01”:{
“_默认值”:“120035”
},
“A-02”:{
“_默认值”:“120035”
},
“A-03”:{
“_默认值”:“120036”
},
“A-04”:{
“_默认值”:“100024”
}
}
var结果=[];
功能记录(acc、obj){
if(对象类型==“对象”){
for(obj中的var键){
rec(根据concat([关键]),obj[关键];
}
返回;
}
结果:推挤(根据concat([obj]);
}
rec([],obj);
控制台日志(结果)代码>您可以使用以下递归函数来展平数组中对象的属性
这个函数
- 仅将一个参数作为参数和
- 不依赖外部变量
var数据={
关键点:[
“vendorApNbr”,
“类型”
],
地图:{
_默认值:{
_默认值:“100026”,
PT_CC:“120035”,
PT_DC:“120037”
},
A00:{
_默认值:“120037”
},
A01:{
_默认值:“120035”
},
A02:{
_默认值:“120035”
},
A03:{
_默认值:“120036”
},
A04:{
_默认值:“100024”
}
}
};
函数makeItFlat(数据){
var newArray=[];
var properties=Object.getOwnPropertyNames(数据);
对于(属性的var属性){
if(数据类型[prop]=“object”){
var flat=makeItFlat(数据[prop]);
用于(平面的var f){
if(!Array.isArray(f)){
f=[f];
}
newArray.push([prop].concat(f));
}
}否则{
newArray.push([prop].concat([data[prop]]);
}
}
返回新数组;
}
var flatArray=makeItFlat(data.map);
console.log(flatArray)代码>听起来不错。我来试试这个。也在寻找一种从数组形式回到嵌套对象形式的方法。
[
['_default', '_default', "'10026'"],
['_default', 'PT_CC', "'120035'"],
['_default', 'PP_DC', "'120037'"],
['A-00', '_default', "'120037'"],
['A-01', '_default', "'120035'"],
...etc
['A-04', '_default', "'100024'"]
]