如何同时映射两个数组?

时间:2016-12-24 07:32:51

标签: javascript reactjs

我有两个数组,一个是网址,另一个是内容。 它们看起来像这样:

const link = [ 'www.test0.com', 'www.test1.com', 'www.test2.com' ]
const content = [ 'this is test0 content', 'this is test1 content', 'this is test2 content' ]

如何同时映射两个数组并在新创建的元素中使用它们的值?

我需要使用我的reactplayer的url值和内容的值作为播放器下面的文本。

所以看起来应该是这样的:

<Reactplayer url"link0" />
<ControlLabel>content0</ControlLabel>

这可能吗?什么是更好的设置方法?

2 个答案:

答案 0 :(得分:12)

使用map的第二个参数,它是当前元素的索引,您可以访问第二个数组的正确元素。

const link = [ 'www.test0.com', 'www.test1.com', 'www.test2.com' ];
const content = [ 'this is test0 content', 'this is test1 content', 'this is test2 content' ]

const players = link.map((value, index) => {
  const linkContent = content[index];
  return (
    <div>
      <Reactplayer url="{value}" />
      <ControlLabel>{linkContent}</ControlLabel>
    </div>
  );
});

这是zip方法的完美候选者,如果您的项目中包含其中一个库,则可以使用各种库,例如LodashRambda

const players = _.zip(link, content).map((value) => {
  return (
    <div>
      <Reactplayer url="{value[0]}" />
      <ControlLabel>{value[1]}</ControlLabel>
    </div>
  );
});

答案 1 :(得分:0)

你最好将其作为:

const data = [
    { link: "www.test0.com", text: "this is test0 content" },
    { link: "www.test1.com", text: "this is test1 content" }
];

然后,您将呈现如下内容:

render() {
    var links = [];
    for (var i = 0; i < data.length; i++) {
        var item = data[i];
        links.push(<div><Reactplayer url={item.link}/><ControlLabel>{item.text}</ControlLabel></div>);
    }

    return (<div>{links}</div>);
}

请注意,这是未经测试的代码,因为我目前没有设置可以测试的JSX项目。