将变量用作具有值的对象

时间:2017-07-03 13:35:56

标签: javascript node.js

我有一个可以接受几个参数的函数,其中一个参数可以是一个内部具有更多属性的对象。像这样:

myFunction(res.columns, res.data, {
        margin: {
            top: 65
        },
        styles: {
            overflow: 'linebreak',
        },
        columnStyles: {
            1: {
                columnWidth: 100
            },
            2: {
                columnWidth: 80
            }
        }
}):

现在,我的问题是: 你可以看到其中的“columnStyles”有不同的索引,里面有一个属性及其值。问题在于,根据请求的类型,数字100和80会发生变化。我想要做的是一个开关案例,根据你得到的参数,我为这样的变量赋值:

switch (type) {
        case 'components':
            config = {
                1: {
                    columnWidth: 100
                },
                2: {
                    columnWidth: 80
                }
            }
            console.log(config);
            break;
    }

我想要做的是,在“columnStyles”中,只放置“config”并使其获取上面开关案例中分配的值,所以它会是这样的:

myFunction(res.columns, res.data, {
            margin: {
                top: 65
            },
            styles: {
                overflow: 'linebreak',
            },
            columnStyles: {
                config
            }
    }):

我所看到的是,在调试器控制台中,“config”的值是正确的,但它们没有被接受,也没有做任何事情。

任何想法或提示?

谢谢!

2 个答案:

答案 0 :(得分:2)

为什么不将columnStyles设置为config

myFunction(res.columns, res.data, {
        margin: {
            top: 65
        },
        styles: {
            overflow: 'linebreak',
        },
        columnStyles: config
}):

除非我遗漏了某些内容,否则上述内容应该对你有用。

如果您希望config中的合并与其他值,那么您可以使用Object.assign或对象传播(...)。

要合并,您可能希望这样做:

myFunction(res.columns, res.data, {
        margin: {
            top: 65
        },
        styles: {
            overflow: 'linebreak',
        },
        columnStyles: Object.assign(existingConfig, config)
}):

myFunction(res.columns, res.data, {
        margin: {
            top: 65
        },
        styles: {
            overflow: 'linebreak',
        },
        columnStyles: {
            3: {
                columnWidth: 123
            },
            4: {
                columnWidth: 678
            },
            ...config
        }
});

*注意:如果没有一些转换帮助,某些版本的节点可能无法使用对象扩展语法:)

答案 1 :(得分:2)

只需写下

myFunction(res.columns, res.data, {
            margin: {
                top: 65
            },
            styles: {
                overflow: 'linebreak',
            },
            columnStyles: config, 
}):

你应该好。添加额外的大括号会将对象名称添加为属性:

{
                margin: {
                    top: 65
                },
                styles: {
                    overflow: 'linebreak',
                },
                columnStyles: {
                    config: {
                         columnStyles: {...}
                    }
                }
}