722 Stimmen

Wie erhält man einen Schlüssel in einem JavaScript-Objekt durch seinen Wert?

Ich habe ein recht einfaches JavaScript-Objekt, das ich als assoziatives Array verwende. Gibt es eine einfache Funktion, mit der ich den Schlüssel für einen Wert abrufen kann, oder muss ich das Objekt iterieren und es manuell herausfinden?

0 Stimmen

Es gibt keine Standardfunktion für diese Aufgabe. Wenn die Zuordnung wirklich bidirektional ist, ist es trivial, eine "umgekehrte" Zuordnung zu konstruieren und diese zu indizieren. Andernfalls eine einfache Eigenschaft-Iterator (mit einem hasOwnProperty gaurd, vielleicht) und eine frühe Rückgabe versteckt innerhalb einer Funktion tut gerade schön...

0 Stimmen

Wie könnte das funktionieren, wenn ein Objekt von mehr als einem Schlüssel referenziert wird? var o = []; var map = {first: o, second: o} . Was würde find_key(o) zurückkehren?

5 Stimmen

Spielt keine Rolle ;) Ich wollte es nur für ein Array mit eindeutigen Schlüssel-Wert-Paaren verwenden.

2voto

andrew_reece Punkte 19248

Kam hierher (im Jahr 2022) und suchte nach einer ähnlichen Variante der Frage des Auftraggebers. Variation:

Wie findet man einen Objektschlüssel anhand eines Wertes, wobei die Schlüssel Sammlungen von Werten enthalten können?

Für diesen Anwendungsfall wechseln Sie von Gleichheit ( === ) a .includes() :

const foo = ['a', 'b','c'];
const bar = ['x', 'y', 'z'];
const bat = [2, 5, 'z'];
const obj = {foo: foo, bar: bar, bat: bat};

const findMe = (v) => {
  return Object.keys(obj).filter((k) => obj[k].includes(v))
}

findMe('y') // ['bar']
findMe('z') // ['bar', 'bat']

2voto

Atur Punkte 1522

http://jsfiddle.net/rTazZ/2/

var a = new Array(); 
    a.push({"1": "apple", "2": "banana"}); 
    a.push({"3": "coconut", "4": "mango"});

    GetIndexByValue(a, "coconut");

    function GetIndexByValue(arrayName, value) {  
    var keyName = "";
    var index = -1;
    for (var i = 0; i < arrayName.length; i++) { 
       var obj = arrayName[i]; 
            for (var key in obj) {          
                if (obj[key] == value) { 
                    keyName = key; 
                    index = i;
                } 
            } 
        }
        //console.log(index); 
        return index;
    }

0 Stimmen

@Fr0zenFyr : Folgender Link kann Ihre Frage besser beantworten - stackoverflow.com/questions/8423493/

2voto

Slopeside Creative Punkte 8641

Oder, noch einfacher, Sie erstellen ein neues Objekt mit den Schlüsseln und Werten in der gewünschten Reihenfolge und suchen dann in diesem Objekt nach. Bei der Verwendung der obigen Prototypcodes sind Konflikte aufgetreten. Sie müssen die String-Funktion nicht um den Schlüssel herum verwenden, das ist optional.

 newLookUpObj = {};
 $.each(oldLookUpObj,function(key,value){
        newLookUpObj[value] = String(key);
    });

1voto

Pooja Punkte 356

Underscore js Lösung

let samplLst = [{id:1,title:Lorem},{id:2,title:Ipsum}]
let sampleKey = _.findLastIndex(samplLst,{_id:2});
//result would be 1
console.log(samplLst[sampleKey])
//output - {id:2,title:Ipsum}

1voto

Cody Punkte 9242

Als ob diese Frage nicht schon oft genug gestellt worden wäre...

Hier ist eine, nur um Sie neugierig zu machen...

Wenn Sie sich sicher sind, dass Ihr Objekt nur Zeichenkettenwerte haben wird, können Sie sich wirklich anstrengen, diese Implementierung herbeizuzaubern:

var o = { a: '_A', b: '_B', c: '_C' }
  , json = JSON.stringify(o)
  , split = json.split('')
  , nosj = split.reverse()
  , o2 = nosj.join('');

var reversed = o2.replace(/[{}]+/g, function ($1) { return ({ '{':'}', '}':'{' })[$1]; })
  , object = JSON.parse(reversed)
  , value = '_B'
  , eulav = value.split('').reverse().join('');

console.log('>>', object[eulav]);

Vielleicht gibt es hier etwas Nützliches, worauf man aufbauen kann...

Ich hoffe, das amüsiert Sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X