当我的配置文件中有一个普通数组时,我应该如何使用 jQuery 扩展?

发布于 2024-11-29 14:47:08 字数 383 浏览 1 评论 0原文

似乎 $.extend 仅使用其输入的键来确定要覆盖的内容。因此,当我的配置如下所示

var config = {
    "numeric" : false,
    "keycode_whitelist" : [
        37, 39, // Left, right
        9,      // Tab
        17,     // Ctrl
        116     // F5
    ]
};

并使用更多键码扩展以添加到白名单时,扩展只是用新键码一一覆盖默认值,即使它们是不同的值。

我正在考虑通过键入 37: 37, 39: 39 等键来解决这个问题。我希望有一个不会强迫我搞乱配置语法的解决方案。

Seems $.extend uses only the keys of its input to determine what to overwrite. So when my config looks like this

var config = {
    "numeric" : false,
    "keycode_whitelist" : [
        37, 39, // Left, right
        9,      // Tab
        17,     // Ctrl
        116     // F5
    ]
};

and is extended with more keycodes to add to the whitelist, extend simply overwrites the defaults with the new keycodes one by one even though they are different values.

I'm thinking about solving this problem by typing the keys like this 37: 37, 39: 39 etc. I would love a solution that doesn't force me to mess up the syntax of my configuration though.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠栀 2024-12-06 14:47:08

您可能想使用 merge 而不是扩展:

var config = {
    "numeric": false,
    "keycode_whitelist": [
        37, 39, // Left, right
        9, // Tab
        17, // Ctrl
        116 // F5
    ]
};

var custom = {
    "somevalue": "some other things",
    "keycode_whitelist": [
        1, 2, 3
        ]
};
var newopts = $.extend({}, config, custom);
newopts.keycode_whitelist = $.merge(custom.keycode_whitelist, config.keycode_whitelist);

演示:http://jsfiddle.net/3Q4cF/2/

更新:

合并每个数组:

$.each(config, function(key, obj){
    if($.isArray(obj)) {
        if(custom[key]) {
           newopts[key] = $.merge(config[key], custom[key]);
        }
    }
} );

http://jsfiddle.net/3Q4cF/5/

You might want to use merge instead of extend:

var config = {
    "numeric": false,
    "keycode_whitelist": [
        37, 39, // Left, right
        9, // Tab
        17, // Ctrl
        116 // F5
    ]
};

var custom = {
    "somevalue": "some other things",
    "keycode_whitelist": [
        1, 2, 3
        ]
};
var newopts = $.extend({}, config, custom);
newopts.keycode_whitelist = $.merge(custom.keycode_whitelist, config.keycode_whitelist);

Demo: http://jsfiddle.net/3Q4cF/2/

Update:

To merge every single array:

$.each(config, function(key, obj){
    if($.isArray(obj)) {
        if(custom[key]) {
           newopts[key] = $.merge(config[key], custom[key]);
        }
    }
} );

http://jsfiddle.net/3Q4cF/5/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文