如何在对象中找到作为数组的第一个属性?

时间:2017-05-17 03:44:45

标签: javascript arrays loops

我正在创建一个循环遍历数组的函数:

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)。

4 个答案:

答案 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];
})