Przeszukanie tablicy w JavaScript

0
        $scope.languages = [
            {
                language: "English",
                i18n: "en"
            },
            {
                language: "Español",
                i18n: "es"
            },
            {
                language: "Polski",
                i18n: "pl"
            },
            {
                language: "Português",
                i18n: "pt"
            },
            {
                language: "Svenska",
                i18n: "se"
            },
        ];

Czy jest jakaś funkcja, która znajdzie mi wartość pod kluczem language, jeżeli podam wartość klucza i18n? Nie chcę robić tego w pętli, dlatego chciałbym się dowiedzieć czy można zrobić to prościej, czyli przykładowo:

podaje wartość se i otrzymuję odpowiedź Svenska

Jak to zrobić najprościej?

0

Nie zrobisz tego w ten sposób. Chcesz podać jedno property, a otrzymać wartość zupełnie innego.

jQuery ma coś, co Ci może pomóc, a mianowicie jest to metoda $.grep. W czystym js to mniej wiecej coś takiego:

function grep(elems, callback, invert) {
    var callbackInverse, matches = [],
        i = 0,
        length = elems.length,
        callbackExpect = !invert;

    // Go through the array, only saving the items
    // that pass the validator function
    for (; i < length; i++) {
        callbackInverse = !callback(elems[i], i);
        if (callbackInverse !== callbackExpect) {
            matches.push(elems[i]);
        }
    }

    return matches;
}

var languages = [{
    language: "English",
    i18n: "en"
}, {
    language: "Español",
    i18n: "es"
}, {
    language: "Polski",
    i18n: "pl"
}, {
    language: "Português",
    i18n: "pt"
}, {
    language: "Svenska",
    i18n: "se"
}, ];

var result = grep(languages, function(elem) {
    return elem.i18n == "se";
});

// result [Object] 
// 	i18n: "se"
// 	language: "Svenska"


if (result.length == 0) {
    //nie znaleziono
} else if (result.length == 1) {
    // znaleziono, teraz możesz dobrać się do language result[0].language
    // result[0].language => "Svenska"
} else {
    // znaleziono więcej niż jeden raz
}
1

W nowszych przeglądarkach obsługujących Array.prototype.find() możesz to zrobić tak:

var languages = [
    {
        language: "English",
        i18n: "en"
    },
    {
        language: "Español",
        i18n: "es"
    },
    {
        language: "Polski",
        i18n: "pl"
    },
    {
        language: "Português",
        i18n: "pt"
    },
    {
        language: "Svenska",
        i18n: "se"
    }
];

function hasLang(element) {
    'use strict';
    return element.i18n === this;
}

var langFullName = languages.find(hasLang, "pl").language;

// test:
console.log(langFullName);

Do obsługi starszych przeglądarek potrzebne będzie dodanie polyfilla dostępnego na stronie: https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Array/find

1 użytkowników online, w tym zalogowanych: 0, gości: 1