如何从嵌套在父对象中的键值创建对象数组

时间:2018-06-29 14:02:57

标签: javascript arrays object

我在这样的对象中嵌套了对象:

var parentObj = { 
   key1: {
     a: true,
     b: 2
   },
   key2: {
     a: false,
     b: 2
   },
   key3: {
     a: true,
     b: 2
   }
}

如果嵌套对象中的值之一为true,则我打算根据键值创建对象数组,并且还包括一对[key,value]对键,如下所示:

parentobj = [
  {
    a: true,
    b: 2,
    c: "key1" 
  },
  {
    a: true,
    b: 2,
    c: "key3"
  }
]

3 个答案:

答案 0 :(得分:1)

只需使用for ... in循环,如下所示:

var myArray = [];
for(var key in parentObj){
   var childObj = parentObj[key];
   if(childObj.a) {
      myArray.push({a: childObj.a, b: childObj.b, c: key });
   }
}

答案 1 :(得分:0)

这里首先要提到的是

  

关联数组在Javascript中不存在

您可以看到here

在您的示例中,“ key1”是重复的,因此,如果要像这样存储,则必须使用Array,例如,如果嵌套对象中的值之一为true

var parentObj = {
   key1: [
       {
         a: true,
         b: 2
       },
       {
         a: false,
         b: 2
       }
   ],
   key3: [
       {
         a: true,
         b: 2
       }
   ]
};

在这种情况下,您想要的就是这样!

var parentObj = {
   key1: [
       {
         a: true,
         b: 2
       },
       {
         a: false,
         b: 2
       }
   ],
   key3: [
       {
         a: true,
         b: 2
       }
   ]
};
var myArray = [];
for(var key in parentObj){
   var childObj = parentObj[key];
   var res = childObj.filter(function(element){
       return  element.a == true;
   });
   for(ele in res){
       res[ele].c = key;
   }
   if(res.length > 0){
       // if you want any of element having true property
       myArray.push(res[0]);
   }
}
console.log(myArray);

答案 2 :(得分:0)

一个简单的单行解决方案:从对象中提取密钥并在创建各自的对象时对其进行迭代,并过滤掉那些虚假的对象:

var parentObj = { 
   key1: {
     a: true,
     b: 2
   },
   key2: {
     a: false,
     b: 2
   },
   key3: {
     a: true,
     b: 2
   }
};

var result = Object.keys(parentObj).map(k => (Object.assign({}, parentObj[k], {c: k}))).filter(({a}) => a);

console.log(result);