我正在尝试询问一个多维对象,并根据我可用的变量返回该对象的一部分。我无法访问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()三次,这是可行的,但我觉得必须有一个更简单的解决方案。下面是我所拥有的:
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];
}
});
});
});有没有其他东西可以用来遍历这个对象,直到我按下匹配的键?然后返回该键的值?
发布于 2020-02-12 22:39:23
const myObj = {
blue: {
three: {
star: {
foo: "this object is what I want",
foo2: "this object is what I want"
}
}
}
}您可以遍历所有属性,并检查该属性是否是您想要的。然后你就可以从它们或任何你喜欢的东西中构建数组。:)
const seeker = function (object) {
for (let property in object)
{
if (property === 'star')
{
console.log(property, object[property])
}
if (object[property] instanceof Object)
seeker(object[property])
}
}发布于 2020-02-12 22:32:25
也许你可以试试这个:
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), []);
}https://stackoverflow.com/questions/60190201
复制相似问题