我在这样的对象中嵌套了对象:
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"
}
]
答案 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);