我有一个对象数组,如下所示:
[
{
"a":"alpha",
"b":{
"x":true,
"y":true
}
},
{
"a":"beta",
"b":{
"x":true,
"z":true
}
}
]
我想遍历这个数组,以获得' b'的所有键的qnique列表。单独。那么,我得到的数组将是:
[x,y,z]
我尝试了以下内容:
const mykeys = myArray.map(item => Object.keys(item.b))
然而,这只会让我感到惊讶:[[x,y],[y,z]]
如何将结果改为[x,y,z]。
答案 0 :(得分:1)
使用Array#reduce将数组连接成单个数组。然后将spread operator与Set一起使用即可获得独特的商品。
Set 可让您存储唯一值。
const myArray = [
{
"a":"alpha",
"b":{
"x":true,
"y":true
}
},
{
"a":"beta",
"b":{
"x":true,
"z":true
}
}
]
const mykeys = myArray.map(item => Object.keys(item.b))
.reduce((a,b) => a.concat(b));
const uniqueKeys = [...new Set(mykeys)];
console.log(uniqueKeys);

答案 1 :(得分:1)
您可以通过使用变量获取对象的所需键并获取所有内部键来采用动态方法。
如果给定的密钥不存在,则此方法使用默认对象。
var data = [{ a: "alpha", b: { x: true, y: true } }, { a: "beta", b: { x: true, z: true } }],
key = 'b',
unique = [
...new Set(
data.reduce((r, o) => [...r, ...Object.keys(o[key]) || {}], [])
)
];
console.log(unique);

答案 2 :(得分:0)
您可以使用带有数组扩展语法的Set
来获取唯一键。
const myArray = [{"a":"alpha","b":{"x":true,"y":true}},{"a":"beta","b":{"x":true,"z":true}}],
myuniquekeys =[...new Set([].concat(...myArray.map(({b}) => Object.keys(b))))];
console.log(myuniquekeys);

答案 3 :(得分:0)
这是实现你想要的简单而且理解的方式。
var inputArray = [
{
"a":"alpha",
"b":{
"x":true,
"y":true
}
},
{
"a":"beta",
"b":{
"x":true,
"z":true
}
}
];
var resArray = [];
inputArray.forEach((inputObj)=>{
var keysForB = Object.keys(inputObj.b);
keysForB.forEach((keyInB)=>{
if(!resArray.includes(keyInB)){
resArray.push(keyInB);
}
});
});
console.log(resArray);