Javascript:使用forEach遍历diff类型数组

时间:2018-08-11 18:00:31

标签: javascript

arr = ["billy", "bobby", {"hank": "true"}]

arr.forEach((name, index) => {
   if (typeof(name) == "object") {
     ??????
   } else {
     console.log(name)
   }
})

给定数组arr,我可以使用for进行遍历吗,以控制台记录每个名称(如果是对象,则为键)?我以为我可以在其中扔一个条件来捕获对象,但是从那里我不确定如何注销密钥。

5 个答案:

答案 0 :(得分:1)

您可以遍历数组项,并检查该对象是否存在,如果是该对象,则可以使用获取属性的循环“ for-in”循环对其每个属性进行迭代,然后获取的值。属性

arr = ["billy", "bobby", {"hank": "true"}]

arr.forEach((name, index) => {
   if (typeof(name) == "object") {
    for(var objProp in name){
    console.log(objProp, name[objProp])
}
   } else {
     console.log(name)
   }
})

答案 1 :(得分:1)

如果对象仅包含一个属性,则可以采用Object.keys的第一项。有关更多信息,您需要迭代密钥。

var array = ["billy", "bobby", { hank: "true" }];

array.forEach((name, index) => {
    if (typeof(name) == "object") {
        console.log(Object.keys(name)[0]);
    } else {
        console.log(name);
    }
});

答案 2 :(得分:1)

使用Object.keys()函数获取键的名称:

const arr = ["billy", "bobby", {"hank": "true"}]

arr.forEach((name, index) => {
   if (typeof(name) == "object") {
     Object.keys(name).forEach(n => console.log(n)); // log all names in the object
   } else {
     console.log(name)
   }
})

如果您只想注销那些名称,其值为"true",请为其添加过滤器:

const arr = ["billy", "bobby", {"hank": "true", "connor": "false"}]

arr.forEach((name, index) => {
   if (typeof(name) == "object") {
     Object.keys(name)
       .filter(n => name[n] === "true")
       .forEach(n => console.log(n)); // log all names in the object which's value is "true"
   } else {
     console.log(name)
   }
})

答案 3 :(得分:0)

您可以使用Object.keys()获取对象中的所有键,然后在其上进行映射,但是要检查对象,还应检查其是否不为null,否则将导致潜在的错误 >

const arr = ["billy", "bobby", {"hank": "true"}, null]

arr.forEach((name, index) => {
   if(!name) {
    return; 
   }
   if (typeof name == "object") {
     Object.keys(name).forEach(n => console.log(n)); // log all names in the object
   } else {
     console.log(name)
   }
})

答案 4 :(得分:0)

这是一种使用typeof获取类型并处理Arrays的解决方案,从某种意义上来说就是要获取它们的第一个元素。

他们trick使用Object.key来获取对象的键。您可以阅读more about it here

arr = ["billy", "bobby", {"hank": "true"}, [1]]

// With array support - print just first element
arr.forEach(name => console.log(typeof name === 'object' ? Array.isArray(name) ? name[0] : Object.keys(name)[0]: name ))

自您在控制台中打印以来的另一种解决方案是利用JSON.stringify并以此方式生成一组漂亮的数组/对象:

arr = ["billy", "bobby", {"hank": "true"}, [1]]
arr.forEach(name => console.log(typeof name === 'object' ? Array.isArray(name) ? JSON.stringify(name) : JSON.stringify(name) : name))