我正在创建一个循环遍历数组的函数:
schema: [{
name: 'firstRow',
fields: [{
name: 'name',
text: 'Name',
type: 'text',
col: 12,
value: ''
}]
}, {
并返回带有对象值的回调:
eachDeep (array, callback) {
array.forEach(item => {
item.fields.forEach(field => {
callback(field)
})
})
},
正如您所见,item.fields.forEach
部分已被编码。如何修改该函数,以便它检测到它是一个数组并循环通过它的第一个属性? (例如,在这种情况下,属性为fields
)。
答案 0 :(得分:2)
您可以检查该字段是否不是数组,如果是,则将其循环,否则使用它做其他事情。
var data = [{
name: 'firstRow',
fields: [{
name: 'name',
text: 'Name',
type: 'text',
col: 12,
value: ''
}]
}, {
name: 'firstRow',
fields: [{
name: 'name',
text: 'Name',
type: 'text',
col: 12,
value: ''
}]
}];
eachDeep (array, callback) {
array.forEach(item => {
// loop through each property again
item.forEach(prop => {
// if property is an array
if (prop instanceof Array) {
prop.forEach(field => callback(field));
} else {
// property is not an array
// do something else
}
})
})
},

答案 1 :(得分:2)
要查找对象的属性是否为数组,您还可以使用以下属性:
//let item be your object's property
if(typeof item == "object" && item.length > 0){
//do whatever if it is an array
}
答案 2 :(得分:1)
var big_array =
[
{
name: 'firstRow',
fields: [{
name: 'name',
text: 'Name',
type: 'text',
col: 12,
value: ''
}]
}
];
for (let item of big_array)
{
for (let key in item)
{
if (Array.isArray(item[key]) )
{
console.log('this is an array do something:', key);
}
}
}

您可以使用Array.isArray()
答案 3 :(得分:0)
如果目标是找到第一个数组属性,则可以执行以下操作。使用ES6。
const schema = [{
name: 'firstRow',
fields: [{
name: 'name',
text: 'Name',
type: 'text',
col: 12,
value: ''
}]
}]
let firstArr;
schema.forEach(item => {
firstArr = Object.keys(item).filter(k => Array.isArray(item[k]))[0];
})