Multiple key names, same pair value

后端 未结 9 1713
萌比男神i
萌比男神i 2020-12-08 13:33

I\'m trying to setup an object literal in a JavaScript script that has a key with multiple names. referring to the same object value i.e. something like these that I have al

相关标签:
9条回答
  • 2020-12-08 14:16

    That should work as expected:

    function getItem(_key) {
        items = [{
            item: 'a',
            keys: ['xyz','foo']
        },{
            item: 'b',
            keys: ['xwt','bar']
        }];
    
        _filtered = items.filter(function(item) {
            return item.keys.indexOf(_key) != -1
        }).map(function(item) {
            return item.item;
        });
        return !!_filtered.length ? _filtered[0] : false;
    }
    
    0 讨论(0)
  • 2020-12-08 14:18

    Same reponse (ES6 Proxy, RegExp), but in a shorter way (and significantly less legible)

    let align = new Proxy({
    
        'start|top|left': -1,
        'middle|center': 0,
        'end|bottom|right': 1,
    
    }, { get: (t, p) => Object.keys(t).reduce((r, v) => r !== undefined ? r : (new RegExp(v).test(p) ? t[v] : undefined), undefined) })
    
    align.start     // -1
    align.top       // -1
    align.left      // -1
    
    align.middle    // 0
    align.center    // 0
    
    align.end       // 1
    align.bottom    // 1
    align.right     // 1
    
    0 讨论(0)
  • 2020-12-08 14:22

    JSON does not offer such a feature, nor do Javascript object literals.

    You might be able to make do with something like this:

    holidays = {
        thanksgiving: {foo: 'foo'},
        groundhogDay: {foo: 'bar'},
        aliases: {
            'thanksgiving day': 'thanksgiving',
            't-day': 'thanksgiving',
            'Bill Murrays nightmare': 'groundhogDay'
        }
    }
    

    and then you can check

    holidays[name] || holidays[holidays.aliases[name]]
    

    for your data.

    It's not a wonderful solution. But it wouldn't be too difficult to write a little function that created this sort of object out of a representation like:

    [
        {
            names: ['thanksgiving', 'thanksgiving day', 't-day'],
            obj: {foo: 'foo'}
        },
        {
            names: ['groundhogDay', 'Bill Murrays nightmare'],
            obj: {foo: 'bar'}
        },
    ]
    

    if that would be easier to maintain.

    0 讨论(0)
提交回复
热议问题