【问题标题】:Mapping and object filled with objects React.js/JS映射和对象填充对象 React.js/JS
【发布时间】:2019-03-30 08:30:29
【问题描述】:

所以我有一个数组,其中包含一个对象,但该对象内部可能有 3 个或更多对象。 这几乎是我调用它的 api 的确切格式(长度有类似数字的原因是因为我在 api 调用中使用了参数。):

[
  {
    0: {
      0: {
        num: 1,
        name: 'franklin',
      },
      1: {
        num: 58,
        name: 'harold',
      },
      8: {
        num: 9,
        name: 'eugene',
      },
      19: {
        num: 5,
        name: 'clive',
      },
    }
  }
]

我正在尝试遍历 0、1、8 和 19 中的每一个以从中提取数据并将它们显示在表格中。每次我尝试它只映射第一个,而不是其他 3 个。

我刚刚做了典型的:

myApi.map((people, i) => {
  let row = <tr>{people[i].num}</tr><tr>{people[i].name}</tr>
  tableRow.push(row);
}) 

,但就像我说的那样,它只显示第一条数据,而不显示其他 3。我哪里出错了?

【问题讨论】:

  • 它看起来像一个带有键 0、1、8 和 19 的对象;不是数组。

标签: javascript arrays reactjs javascript-objects array.prototype.map


【解决方案1】:

您需要遍历数组中的对象。

myApi.map((people) => {
  for(var person in people) {
  let row = <tr>{people[person].num}</tr><tr>{people[person].name}</tr>
  tableRow.push(row);
 }
}) 

我相信是这样的。

【讨论】:

  • 这对我不起作用。 Person 返回为未定义。
【解决方案2】:

map 在这种情况下并不合适,因为您只是在迭代并将对象推送到单独的数组中。另外,请注意,您发布的不是数组;它是一个对象。

要遍历对象的值,您可以使用Object.values 和一个简单的forEach

let myApi = [{
  0: {
    0: {
      num: 1,
      name: 'franklin',
    },
    1: {
      num: 58,
      name: 'harold',
    },
    8: {
      num: 9,
      name: 'eugene',
    },
    19: {
      num: 5,
      name: 'clive',
    },
  },
  1: {
    20: {
      num: 6,
      name: 'bob',
    },
  }
}];

let tableRows = [];
Object.values(myApi[0]).forEach(collection => {
  Object.values(collection).forEach(person => {
    tableRows.push('Name is ' + person.name + '; num is ' + person.num);
  });
});

console.log(tableRows);

【讨论】:

  • 这对我不起作用。由于我使用的是 react,所以我使用 axios 获取了信息,并使用该信息设置了一个状态对象。当我试图通过它进行映射时,我使用this.state.myApi,但如果我使用console.log(this.state.myApi[0]);,它会由于某种原因返回为未定义。编辑:数组中也只有一个对象,因此您添加的对象不适用于我。
  • @NathanGeckle 你的代码中的Object.values(myApi).forEach(person =&gt; {...}) 怎么样?
  • 这可以将所有内容显示到表格中,但我试图显示的某些信息并不是在表格上显示未定义。编辑:没关系,那部分是我的错。在 VSCode 中使用“更改所有事件”时我不小心。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 2018-05-30
  • 1970-01-01
  • 2019-09-19
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
相关资源
最近更新 更多