Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 遍历嵌套对象';使用ES5或lodash展平阵列中的属性_Javascript_Arrays_Nested Loops - Fatal编程技术网

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'"]
    ]