【问题标题】:unable to destructuring two objects simultaneously无法同时解构两个对象
【发布时间】:2023-03-29 17:21:01
【问题描述】:

如何使用列作为属性引用来映射电影。

喜欢

{movies.map(item => {columns.map(column => item.column.path)})}

但是使用这个我得到的结果是undefined

电影包含有关电影的所有详细信息

const movies = [
  {
    _id: "5b21ca3eeb7f6fbccd471815",
    title: "Terminator",
    genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
    numberInStock: 6,
    dailyRentalRate: 2.5,
    publishDate: "2018-01-03T19:04:28.809Z",
    liked: true,
  },
  {
    _id: "5b21ca3eeb7f6fbccd471816",
    title: "Die Hard",
    genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
    numberInStock: 5,
    dailyRentalRate: 2.5,
  },
  {
    _id: "5b21ca3eeb7f6fbccd471817",
    title: "Get Out",
    genre: { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" },
    numberInStock: 8,
    dailyRentalRate: 3.5,
  },
  {
    _id: "5b21ca3eeb7f6fbccd471819",
    title: "Trip to Italy",
    genre: { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
    numberInStock: 7,
    dailyRentalRate: 3.5,
  },
  {
    _id: "5b21ca3eeb7f6fbccd47181a",
    title: "Airplane",
    genre: { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
    numberInStock: 7,
    dailyRentalRate: 3.5,
  }];

列包含访问电影所需的所有属性

const columns = [
        { path: "title", label: "Title" },
        { path: "genre", label: "Genre" },
        { path: "numberInStock", label: "Stock" },
        { path: "dailyRentalRate", label: "Rate" }];

我知道这个问题可以使用 2 个循环来解决。

获取每部电影后的电影的1个外部循环,使用第二个内部循环访问属性

更新:得到@rory-mccrossan 的回答后

此外,我怎样才能将这些数据映射到一个表格中,这样

这是与我使用的相同的代码部分。

import React, { Component } from "react";
import _ from "lodash";

class TableBody extends Component {
  renderCell = (item, column) => {
    if (column.content) return column.content(item);

    return _.get(item, column.path);
  };

  createKey = (item, column) => {
    return item._id + (column.path || column.key);
  };
  render() {
    const { data, columns } = this.props;
    return (
      <tbody>
        {data.map((item) => (
          <tr key={item._id}>
            {columns.map((column) => (
              <td key={this.createKey(item, column)}>
                {this.renderCell(item, column)}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    );
  }
}

export default TableBody;

但我收到 错误:对象作为 React 子项无效(找到:带有键 {_id, name} 的对象)。如果您打算渲染一组子项,请改用数组。)

主要问题是如何在表格中映射数据

【问题讨论】:

  • "但是使用这个我得到的结果是undefined" - 因为{ ... }创建了一个块,因此“删除”了隐含的return所以“内部”.map() 调用不返回任何内容 -> .map(item =&gt; columns.map(...))

标签: javascript jquery reactjs object react-component


【解决方案1】:

这里有两个问题。首先,第二个map() 调用周围的大括号将被解释为代码块,但它不返回任何值,因此结果数组将为空。去掉那些大括号。

其次,item.column.path 必须是 item[column.path],因为您使用 column.path 作为 item 的属性访问器。

这是一个工作示例:

const movies = [{_id:"5b21ca3eeb7f6fbccd471815",title:"Terminator",genre:{_id:"5b21ca3eeb7f6fbccd471818",name:"Action"},numberInStock:6,dailyRentalRate:2.5,publishDate:"2018-01-03T19:04:28.809Z",liked:!0},{_id:"5b21ca3eeb7f6fbccd471816",title:"Die Hard",genre:{_id:"5b21ca3eeb7f6fbccd471818",name:"Action"},numberInStock:5,dailyRentalRate:2.5},{_id:"5b21ca3eeb7f6fbccd471817",title:"Get Out",genre:{_id:"5b21ca3eeb7f6fbccd471820",name:"Thriller"},numberInStock:8,dailyRentalRate:3.5},{_id:"5b21ca3eeb7f6fbccd471819",title:"Trip to Italy",genre:{_id:"5b21ca3eeb7f6fbccd471814",name:"Comedy"},numberInStock:7,dailyRentalRate:3.5},{_id:"5b21ca3eeb7f6fbccd47181a",title:"Airplane",genre:{_id:"5b21ca3eeb7f6fbccd471814",name:"Comedy"},numberInStock:7,dailyRentalRate:3.5}];
const columns = [{path:"title",label:"Title"},{path:"genre",label:"Genre"},{path:"numberInStock",label:"Stock"},{path:"dailyRentalRate",label:"Rate"}];

let output = movies.map(item => columns.map(column => item[column.path]));
console.log(output);

【讨论】:

  • 这很完美,但我提出这个问题的主要目的是找到这篇文章的答案link
  • 问题应该是自包含的。如果您得到的答案不能解决您的问题,我建议您更详细地更新该问题。
  • 不,这不是本网站的运作方式。你分开提问。你不应该问一个问题,得到一个有效的答案,然后将问题编辑为完全不同的东西。
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2019-02-25
  • 2019-11-18
  • 1970-01-01
  • 2018-05-26
相关资源
最近更新 更多