我有以下对象:
const foo = {
prop1: 'I am a string',
prop2: [
{ prop2_1: 'I am a sub string' },
{ prop2_2: 'I am a sub string' },
],
prop3: 'I am a string',
prop4: [
{ prop4_1: 'I am a sub string' },
{ prop4_2: 'I am a sub string' },
],
}
在JavaScript(即不是jQuery)中,我如何循环通过foo的属性并确定它的任何属性是否是数组?我试了这个没有运气:
for (const prop in foo) {
if (prop!== undefined) {
if (Object.prototype.toString.call(prop) === '[object Array]') {
prop.map((child) => {
// do something
});
}
}
}
答案 0 :(得分:3)
您想要Array.isArray
。
您可能需要填充此内容。
<强>非递归强>
Object.keys(foo).some((k) => Array.isArray(foo[k]));
<强>递归强>
function containsArr(o) {
for (var k of Object.keys(o)) {
if (recursive(o[k])) {
if (containsArr(o[k])) {
return true;
}
continue;
}
if (Array.isArray(o[k])) {
return true;
}
}
return false;
}
// We recurse into functions
// and plain objects.
function recursive(o) {
return /^\[object (Object)| (Function)\]/
.test(Object.prototype.toString.call(o));
}
答案 1 :(得分:0)
两个错误
首先,const prop将失败,因为const是常量
其次,prop是关键,所以它永远不会是一个数组
更正的代码是
for (let prop in foo) {
if (foo.hasOwnProperty(prop)) {
if (Object.prototype.toString.call(foo[prop]) === '[object Array]') {
foo[prop].map((child) => {
// do something
});
}
}
}