如何在React中映射对象数组

时间:2016-12-07 21:26:40

标签: arrays object dictionary reactjs components

我有一个对象数组。我想映射这个对象数组。我知道如何映射数组,但无法弄清楚如何映射对象数组。以下是我到目前为止所做的事情:

我要映射的对象数组:

const theData = [
    {
        name: 'Sam',
        email: 'somewhere@gmail.com'
    },

    {
        name: 'Ash',
        email: 'something@gmail.com'
    }
]

我的组件:

class ContactData extends Component {
    render() {
        //works for array
        const renData = this.props.dataA.map((data, idx) => {
            return <p key={idx}>{data}</p>
        });

        //doesn't work for array of objects
        const renObjData = this.props.data.map(function(data, idx) {
            return <p key={idx}>{data}</p>
        });

        return (
            <div>
                //works
                {rennData}
                <p>object</p>
                //doesn't work
                {renObjData}
            </div>
        )
    }
}


ContactData.PropTypes = {
    data: PropTypes.arrayOf(
        PropTypes.obj
    ),
    dataA: PropTypes.array
}

ContactData.defaultProps = {
    data: theData,
    dataA: dataArray
}

我错过了什么?

6 个答案:

答案 0 :(得分:14)

您需要的是映射您的对象数组并记住每个项目都是一个对象,以便您使用例如点符号来获取对象的值。

在您的组件中

 [
    {
        name: 'Sam',
        email: 'somewhere@gmail.com'
    },

    {
        name: 'Ash',
        email: 'something@gmail.com'
    }
].map((anObjectMapped, index) => {
    return (
        <p key={`${anObjectMapped.name}_{anObjectMapped.email}`}>
            {anObjectMapped.name} - {anObjectMapped.email}
        </p>
    );
})

请记住,当你放置一个jsx数组时,它有不同的含义,你不能只是把对象放在你的渲染方法中,因为你可以放一个数组。

mapping an array to jsx

查看我的回答

答案 1 :(得分:2)

我想您要打印此人的姓名或同时打印姓名和电子邮件:

const renObjData = this.props.data.map(function(data, idx) {
    return <p key={idx}>{data.name}</p>;
});

或:

const renObjData = this.props.data.map(function(data, idx) {
   return ([
       <p key={idx}>{data.name}</p>,
       <p key={idx}>{data.email}</p>,
   ]);
});

答案 2 :(得分:1)

@FurkanO提供了正确的方法。虽然要采用更清洁的方法(es6方式),你可以做类似的事情

[{
    name: 'Sam',
    email: 'somewhere@gmail.com'
 },
 {
    name: 'Ash',
    email: 'something@gmail.com'
 }
].map( ( {name, email} ) => {
    return <p key={email}>{name} - {email}</p>
})

干杯!

答案 3 :(得分:1)

你必须把对象放在你的 JSX 中,这是一个简单的方法,只需在这里查看我的简单代码:

const link = [
  {
   name: "Cold Drink",
   link: "/coldDrink"
  },
  {
   name: "Hot Drink",
   link: "/HotDrink"
  },

{ name: "芝士蛋糕", 链接:“/芝士蛋糕” } ]; 并且您必须使用简单对象在代码中映射此数组,请参阅此代码:

const links = (this.props.link);
{links.map((item, i) => (
 <li key={i}>
   <Link to={item.link}>{item.name}</Link>
 </li>
 ))}

希望这个回答对你有帮助...:)

答案 4 :(得分:0)

尝试以下代码段

const renObjData = this.props.data.map(function(data, idx) {
    return <ul key={idx}>{$.map(data,(val,ind) => {
        return (<li>{val}</li>);
    }
    }</ul>;
});

答案 5 :(得分:0)

通过Data手指出来的地图功能演示 https://reactjs.org/docs/lists-and-keys.html

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((number) => number * 2);
console.log(doubled);