我有一个对象数组。我想映射这个对象数组。我知道如何映射数组,但无法弄清楚如何映射对象数组。以下是我到目前为止所做的事情:
我要映射的对象数组:
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
}
我错过了什么?
答案 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数组时,它有不同的含义,你不能只是把对象放在你的渲染方法中,因为你可以放一个数组。
查看我的回答答案 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);