JavaScript Objektschlüssel zwischen 1 und 9

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
689
Hallo.
Das Objekt der Begierde:
Javascript:
const Beispielobjekt = {"0": "Text 1",
                        "1-9": "Text 2"}

Ist es möglich einen Schlüssel in einem Objekt zu definieren, dass bei allen Zahlen zwischen 1 und 9 "Text 2" ausgibt, aber bei 0 den Text 1?
Bezogen auf das oben genannte Objekt also:

Javascript:
Beispielobjekt["0"] -> "Text 1"
Beispielobjekt["1"] -> "Text 2"
...
Beispielobjekt["9"] -> "Text 2"
 
Javascript:
var hdl = {
    get: function(target, name){
        switch(name)
        {
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                return target['1-9'];
            default:
                return target[name];
        }
    }
};
Beispielobjekt = new Proxy(Beispielobjekt, hdl);

edit: oder etwas kürzer:
Javascript:
var hdl = {
    get: function(target, name){
        if(['1','2','3','4','5','6','7','8','9'].includes(name))
        {return target['1-9'];}
        else
        {return target[name];}
    }
};
Beispielobjekt = new Proxy(Beispielobjekt, hdl);

edit: noch eine Möglichkeit:

Javascript:
var hdl = {
    get: function(target, name){
        let k = parseInt(name);
        if(!isNaN(k) && k >= 1 && k <= 9)
        {return target['1-9'];}
        else
        {return target[name];}
    }
};
Beispielobjekt = new Proxy(Beispielobjekt, hdl);
 
Ok danke.

So etwas hatte ich auch schon. Wusste nur nicht, ob es eine spezielle "Alles außer" - Syntax für JS Objektschlüssel gibt?
 
Ich denke nicht, dass es da genau so etwas in der Konvention gibt sondern, dass für alle Spezialfälle proxies vorgesehen sind.
Das was du da vorhast sieht aber nach einer Lösung aus, die beim Lesen des Codes zu Missverständnissen führen könnte. Jemand, der die getter function nicht kennt würde vermuten in den object membern '1','2','3',...'9' steht jeweils der selbe Wert, was nicht der Fall ist. Außerdem bräuchtest du für das Setten auch eine proxy function weil du sonst auf andere Member zugreifst. Übersichtlicher wäre, wenn du die Logik transparent abbilden würdest.
 
floq0r schrieb:
Javascript:
var hdl = {
    get: function(target, name){
        if(['1','2','3','4','5','6','7','8','9'].includes(name))
        {return target['1-9'];}
        else
        {return target[name];}
    }
};
Beispielobjekt = new Proxy(Beispielobjekt, hdl);
Andersrum vielleicht:

Javascript:
var hdl = {
    get: function(target, name){
        if(name=='0')
        {return target[name];}
        else
        {return target['1-9'];}
    }
};
Beispielobjekt = new Proxy(Beispielobjekt, hdl);
 
Zurück
Oben