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在示例预期输出中省略了键字符串周围的引号,但正如您的评论所示,这是正确的答案。