下面的代码在我的函数中效果很好:
console.log(theme.colors.blues[1]);
我试着让最后一部分动态化,就像这样:
const getColor = (theme, passedColorProp) => {
console.log(theme.colors.[passedColorProp]);
};
getColor("blues[1]");
这当前的错误是:
模块构建失败: SyntaxError:意外令牌(15:27)**
我怎么才能让它工作呢?
发布于 2018-04-15 04:49:59
你就快到了,你可以完全按照你所做的那样动态地访问一个属性,除非你不需要额外的点。
const getColor = (theme, passedColorProp) => {
console.log(theme.colors[passedColorProp]);
};
请注意,这适用于单个属性,但您不能像在示例中那样嵌套它,因为您需要使用两个不同的变量:
const getColor = (theme, passedColorProp, id) => {
console.log(theme.colors[passedColorProp][id]);
};
const theme = { colors: { blues: ['something', 'something else'] } };
getColor(theme, 'blues', 1); // 'something else'
发布于 2018-04-15 04:53:47
使用带有正则表达式的String.match()
提取键,然后使用Array.reduce()
迭代它们以获得值:
const theme = {
colors: {
blues: ['blue0', 'blue1']
}
};
const getColor = (theme, passedColorProp) => {
const keys = passedColorProp.match(/[^\[\].]+/g); // match a sequence of everything but [ ] or .
return keys.reduce((r, k) => r[k], theme);
};
console.log(getColor(theme, 'colors.blues[1]'));
https://stackoverflow.com/questions/49836056
复制相似问题