Получать объект array предоставляя признак объекта

Я считаю array объектов следующим:

var nicknames = []

nicknames.push( {id:"100", name:"Juan"} , {id:"200", name:"Mateo"} );

Как я могу получать данные об одном из объектов array nicknames обеспечивая его именем или идентификацией вышеупомянутого объекта?



Первоначальный вопрос: Javascript get corresponding key/value from object

6
задан 23.05.2017, 15:39
4 ответа

Существует одна soluciГіn очень простая для этого, относится друг к другу mГ©todo доступный filter родной формы во всех arrays Снабжает ссылками в MDN :

var results = nicknames.filter(function (nickname) { return nickname.id == '200'; });
var firstObj = (results.length > 0) ? results[0] : null;

Замечает:

mГ©todo filter возвращает array со всеми для элементов, который выполняет ее condiciГіn, с которым есть comtemplar, что не существовал элемент, или что существовали некоторые.

9
ответ дан 01.12.2019, 08:16

Принимая во внимание, что у нас есть переменная следующей формы:

var nicknames= [
    {id:"100", nickname:"Juan"},
    {id:"200", nickname:"Mateo"}
];

SoluciГіn 1 - Родной Js

A travГ©s использования Array.prototype.filter:

/**
 * Devolverá un arreglo con el objeto a buscar o uno vacio si no lo encuentra.
 */
var nickname = nicknames.filter(function(nickname) {
    return nickname.id === "100";
});

В travГ©s использования Array.prototype.reduce:

/**
 * Devolverá el arreglo requerido o null si no lo encuentra.
 */
var nickname = nicknames.reduce(function(value, nickname) {
    return nickname.id === "100" ? nickname : null;
}, null);

SoluciГіn 2 - Использование prototype

Другой mГ©todo, и который мне нравится много, это использование prototype. QuedarГ - во что-то вроде следующее:

/**
 * Devolverá el objeto que coincida con la llave-valor indicados como
 * argumentos de la función.
 *
 * @param String column    El nombre de la columna o llave de referencia
 * @param Any value        El valor buscado sobre la columna indicada
 * @return [Object|Null]   Devolverá null en caso de no hallar coincidencia, en caso contrario devolverá el objeto coincidente
 */
Array.prototype.findBy = function (column, value) {
    for (var i=0; i<this.length; i++) {
        var object = this[i];
        if (column in object && object[column] === value) {
            return object;
        }
    }

    return null;
}

Пример использования quedarГ - в следующей формы:

var nickname = nicknames.findBy('id', '100');

SoluciГіn 3 - Использование librerГ-эксперта

ты Можешь использовать одну librerГ - в как Underscore.js , которые он предлагал бы тебе программные средства как дела для выданного данных. Пример:

var nickname = _.findWhere(nicknames, {id: "100"});

DocumentaciГіn чиновник _ .findeWhere () (в inglГ©s)

6
ответ дан 01.12.2019, 08:16

ECMAScript 2015 (ES6) поставляет ее funciГіn find ()

Пример использования:

function buscar_item_por_id(id){

    return items.find(function(item){
        return item.id === id;
    });

}
4
ответ дан 01.12.2019, 08:16

Поскольку уже упомянул Хорхе Пастрано о самом легком и родном способе делать выбор на договоренности, он используя функцию filter:

var resultados = nicknames.filter(function (nickname) {
    //return {expresion booleana},
});

Где {expresión booleana} смоги быть сравнением со свойством id или name как ты нуждался в этом

resultados останься распределенным с новой одинокой договоренностью с выданными объектами.

Однако для браузеров, которые не выносили бы эту функцию (например IE8 или несовершеннолетний) могут использовать следующий polyfill (извлеченные из документации filter)

if (!Array.prototype.filter) {
    Array.prototype.filter = function(fun/*, thisArg*/) {
        'use strict';

        if (this === void 0 || this === null) {
            throw new TypeError();
        }

        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun !== 'function') {
            throw new TypeError();
        }

        var res = [];
        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
        for (var i = 0; i < len; i++) {
            if (i in t) {
                var val = t[i];

                // NOTE: Technically this should Object.defineProperty at
                //       the next index, as push can be affected by
                //       properties on Object.prototype and Array.prototype.
                //       But that method's new, and collisions should be
                //       rare, so use the more-compatible alternative.
                if (fun.call(thisArg, val, i, t)) {
                    res.push(val);
                }
            }
        }

        return res;
    };
}
3
ответ дан 01.12.2019, 08:16

Теги

Похожие вопросы