从多个数组中获取特定对象属性值

时间:2016-07-05 22:42:51

标签: javascript reactjs

说我有一个看起来像这样的对象......

values = {
      'student': [{
                     'field': 'prefix', 
                     'description': 'First name'
                  }, 
                  {
                     'field': 'suffix', 
                     'description': 'Last name'
                  }, 
                  {
                     'field': 'student_email',
                     'description': 'Email address'
                  }],
      'classes':  [{
                     'field': 'course_code', 
                     'description': 'Course code'
                  }]

    }

我想要

['prefix', 'suffix', 'student_email', 'course_code']

所以这就是我所拥有的:

for (const v in values) {
  v.map((obj, idx) => {
    console.log(obj);
  });
}

它只返回v.map is not a function。我怎样才能做到这一点,我做错了什么? (用jsx编写)。

2 个答案:

答案 0 :(得分:2)

你关闭了:

for(const v in values) {
  values[v].map(obj => {
    console.log(obj.field);
    return obj.field;
  });
}



values = {
  'student': [{
    'field': 'prefix',
    'description': 'First name'
  }, {
    'field': 'suffix',
    'description': 'Last name'
  }, {
    'field': 'student_email',
    'description': 'Email address'
  }],
  'classes': [{
    'field': 'course_code',
    'description': 'Course code'
  }]
};

for(const v in values) {
  values[v].map(obj => {
    console.log(obj.field);
    return obj.field;
  });
}




要将它们放入数组中,您可以执行以下操作:

var result = [];

for(const v in values) {
  result = result.concat(values[v].map(obj => {
    return obj.field;
  }));
}



var values = {
  'student': [{
    'field': 'prefix',
    'description': 'First name'
  }, {
    'field': 'suffix',
    'description': 'Last name'
  }, {
    'field': 'student_email',
    'description': 'Email address'
  }],
  'classes': [{
    'field': 'course_code',
    'description': 'Course code'
  }]
};

var result = [];

for(const v in values) {
  result = result.concat(values[v].map(obj => {
    return obj.field;
  }));
}

console.log(result);




答案 1 :(得分:1)

变量values是一个对象,map()依赖于它是一个数组,因为该函数是在Array.prototype上定义的。

将变量更改为:

values = [
  {
    'student': [{
                 'field': 'prefix', 
                 'description': 'First name'
              }, 
              {
                 'field': 'suffix', 
                 'description': 'Last name'
              }, 
              {
                 'field': 'student_email',
                 'description': 'Email address'
              }]
  },
  {
    'classes':  [{
                 'field': 'course_code', 
                 'description': 'Course code'
              }]
  }
]

然后你可以在map数组上使用values,检索你需要的信息,例如,下面的内容应该让你映射每个值和每个子值:

for (const value in values) {
  value.map((obj) => {
    // should get two calls to the below, one for 'student' and one for 'classes'
    obj.value.map((info) => {
      // should result in 4 calls to log, printing all 'description' values
      console.log(info['description']); 
    }
  });
}