如何将数组动态命名为.map

时间:2018-12-25 13:34:14

标签: javascript reactjs

const linesImages = metrosLines.map((line, i) => {

您好,我需要动态地重命名“ metrosLines”上方的数组名称以传输+'Lines'.map((line,i)=>

运输(已解构的this.props.transport)是与父组件中的this.state.selectValue相等的道具,

总而言之,如果传输===“ rers”,我需要执行“ rerLines.map”, 如果运输===“ metros”,我需要做“ metrosLines.map”,如果运输===“ tramways”,我需要做“ tramwaysLines.map”,

有人知道如何动态命名要映射的数组吗?

谢谢

const { transport, data } = this.props;
const transportImage = require(`../../../images/${transport}/${transport}.svg`);

const metrosLines = ['1', '2', '3', '3bis', '4', '5', '6', '7', '7bis', '8', '9', '10', '11', '12', '13', '14'];
const rersLines = ['a', 'b', 'c', 'd', 'e'];
const tramwaysLines = ['1', '2', '3a', '3b', '5', '6', '7', '8'];


const linesImages = metrosLines.map((line, i) => {
    const importLineImage =  require(`../../../images/${transport}/${line}.svg`);
    return <Media object data-src="holder.js/64x64" src={ importLineImage } alt="Logo ligne métro RATP" key={i} />;
});

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

const lines = {
    metrosLines,
    rersLines,
    tramwaysLines
}

,然后访问以下行:

lines[transport + "Lines"].map()

答案 1 :(得分:1)

在给您答案之前,我需要警告您。如果您完全按照原样进行操作,并且打算动态查找内容而不保留关联地图或switch,则eval()是您唯一的选择。您需要意识到这一点,因为您需要确保transport不包含任何令人讨厌的内容。

const metrosLines = ['1', '2', '3', '3bis', '4', '5', '6', '7', '7bis', '8', '9', '10', '11', '12', '13', '14'];
const rersLines = ['a', 'b', 'c', 'd', 'e'];
const tramwaysLines = ['1', '2', '3a', '3b', '5', '6', '7', '8'];
var transport = 'metros';

console.log(eval(transport+"Lines"));

但是,如果您愿意稍微更改结构,则可以使用以下方法:

const lines = {
  metros: ['1', '2', '3', '3bis', '4', '5', '6', '7', '7bis', '8', '9', '10', '11', '12', '13', '14'],
  rers: ['a', 'b', 'c', 'd', 'e'],
  tramways: ['1', '2', '3a', '3b', '5', '6', '7', '8']
 }
 
 var transport = "rers";
 
 console.log(lines[transport]);

在保留您代码中的大多数自由的同时,无需使用eval

答案 2 :(得分:1)

如果您可以将MetrosLines,rersLines和tramwaysLines转换为以它们为键的对象,例如

const lines = { 
    metrosLines : ['1', '2', '3', '3bis', '4', '5', '6', '7', '7bis', '8', '9', '10', '11', '12', '13', '14'],
    rersLines : ['a', 'b', 'c', 'd', 'e'],
    tramwaysLines : ['1', '2', '3a', '3b', '5', '6', '7', '8']
}

那么您可以喜欢

lines[`${transport}Lines`].map()