我正在尝试查询多维对象,并根据对我可用的变量返回对象的一部分。我无权访问ES6的许多对象和数组方法。
我要询问的对象看起来像:
const myObj = {
blue: {
three: {
star: {
foo: "this object is what I want",
foo2: "this object is what I want"
}
}
}
}
如您所见,这分为三层。我不知道star
以外的其他键是什么。我知道我想返回此键的值(如果有)。
为了返回键star
的对象,我目前正在使用Object.keys().map()
3次,虽然可以,但是我觉得必须有一个更简单的解决方案。以下是我所拥有的:
return Object.keys(myObj).map(function(colour) {
Object.keys(myObj[colour]).map(function(number) {
Object.keys(myObj[colour][number]).map(function(shape){
if (myObj[colour][number][shape] === "star") {
return myObj[colour][number][shape];
}
});
});
});
还有其他东西可用来逐步浏览该对象,直到我按下匹配的键?然后返回该键的值?
也许您可以尝试以下方法:
function recursive(myObj) {
const result = [];
for (const key in myObj) {
if (key === 'star') {
result.push(myObj[key]);
}
if (typeof myObj[key] === 'object') {
result.push(recursive(myObj[key]).reduce((acc, val) => acc.concat(val), []));
}
}
return result.reduce((acc, val) => acc.concat(val), []);
}