2017-09-14 118 views
0

我正在寻找一种方法来访问我的对象内的'fit'和'gif'键。现在,我只能在页面上显示一个或另一个 - 'fit'是一个图像,'gif'是一个gif。多个'包括'在一个函数内

我想可能是我可以用.match但我真的不知道正确的语法

感谢

const sizeMappings = { 
master: '1280', 
    small: '192w', 
    small_fit: '192w', 
    medium: '384w', 
    medium_low_res: '288w', 
    medium_fit: '384w', 
    medium_gif: '384w', 
    medium_fit_low_res: '288w', 
    large: '768w', 
    large_fit: '768w', 
    large_gif: '768w', 
    xlarge: '1280w', 
    xlarge_fit: '1280w', 
} 

const getSrcSet = (renditions, fit, gif) => { 
    const sizes = Object.keys(sizeMappings) 
    .map((key) => { 
     if (fit && !key.includes('fit')) return null 
     const mapping = `${renditions[key]} ${sizeMappings[key]}` 
     return mapping 
    }) 

    return sizes 
    .filter(el => el !== null) 
    .join(',') 
} 
+0

所以,你要同时返回“常规”和给定大小的数组中的“GIF”的版本? – Chris

+0

@Chris是的,这是正确的。现在,我似乎只能返回'合身'或正常的形象 – ramageftw

回答

1

我会使用filter()而不是map(),因为您实际上正在寻找提取数组的子集。然后,将每个关键字匹配为给定大小的名称+ "_gif"或大小名称+ "_fit"

const sizeMappings = { 
 
    master: '1280', 
 
    small: '192w', 
 
    small_fit: '192w', 
 
    medium: '384w', 
 
    medium_low_res: '288w', 
 
    medium_fit: '384w', 
 
    medium_gif: '384w', 
 
    medium_fit_low_res: '288w', 
 
    large: '768w', 
 
    large_fit: '768w', 
 
    large_gif: '768w', 
 
    xlarge: '1280w', 
 
    xlarge_fit: '1280w', 
 
} 
 

 
let size = "large"; //change me 
 

 
let arr = Object.keys(sizeMappings).filter(
 
    (key) => (key === size + "_fit" || key === size + "_gif") 
 
); 
 

 
console.log(arr)

0

筛选,然后再结果如你所愿映射:

const getSrcSet = (renditions, fit, gif) => { 
    return Object.keys(sizeMappings) 
    .filter(key => fit && key.includes('fit') || gif && key.includes('gif')) 
    .map(key => `${renditions[key]} ${sizeMappings[key]}`) 
    .join(',') 
    }