Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 如何从父对象中嵌套的键值创建对象数组_Javascript_Arrays_Object - Fatal编程技术网

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

Javascript 如何从父对象中嵌套的键值创建对象数组,javascript,arrays,object,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,

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

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

只需使用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 });
   }
}

这里首先要提到的是

Javascript中不存在关联数组

你可以看到

在您的示例中,“key1”是重复的,因此如果要存储like,那么如果嵌套对象中的一个值为true,则必须使用数组来存储like

var parentObj = {
   key1: [
       {
         a: true,
         b: 2
       },
       {
         a: false,
         b: 2
       }
   ],
   key3: [
       {
         a: true,
         b: 2
       }
   ]
};
在这种情况下,你想要的就是这样做

var parentObj={
关键1:[
{
a:是的,
b:2
},
{
a:错,
b:2
}
],
关键3:[
{
a:是的,
b:2
}
]
};
var myArray=[];
for(parentObj中的变量键){
var childObj=parentObj[key];
var res=childObj.filter(函数(元素){
返回元素。a==true;
});
for(在res中的元素){
res[ele].c=键;
}
如果(分辨率长度>0){
//如果希望元素中的任何一个具有true属性
myArray.push(res[0]);
}
}

log(myArray)一个简单的单行解决方案:从对象中提取关键点,并在创建相应对象时对其进行迭代,然后过滤掉错误的关键点:

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);

可能重复欢迎使用StackOverflow。仔细研究一下,最大限度地提高你得到答案的机会。在这种情况下,我想知道你已经尝试了什么?你有没有试着自己解决这个问题?如果是这样的话,你被困在哪里?不知道为什么这个答案会被否决?似乎是按照作者的要求做的,(一旦你修复了原始海报JSON中的拼写错误),如果它不是拼写错误,那么你的ans是{a:true,b:2,c:“key3”},那么我们必须为此制作一个数组@关于k_r,OP的问题指出,要求生成的对象“还包括键。OP在示例预期输出中省略了键字符串周围的引号,但正如您的评论所示,这是正确的答案。