Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск в объекте (https://javascript.ru/forum/misc/46107-poisk-v-obekte.html)

Zhazhah 28.03.2014 15:18

Поиск в объекте
 
Добрый день, подскажите как искать в объекте и есть ли готовое более гибкое решение в JQuery ?


Пример, без учета вложенности:

find([{id: 1}, {id: 2},  {id: 3}], {id: 2});

function find(collection, thisArg) {

    var index = -1,
            length = collection.length;

    while (++index < length) {
        var value = collection[index];
        if(value.ID == thisArg.ID) {
            return value;
        }
    }
}

danik.js 28.03.2014 15:21

Ты неправильно это делаешь. Ключевое поле надо и использовать как ключ:
var collection = {1: {}, 2: {}, 3: {}};

function find(collection, thisArg) {
    return collection[this.Arg.id];
}

Zhazhah 28.03.2014 15:33

Да знаю, api возвращает json в таком виде

[{id:1,location:'3'}, ...]


Может понадобиться искать по любому полю, а то и по двум сразу

danik.js 28.03.2014 17:28

Цитата:

Сообщение от Zhazhah
как искать в объекте

У тебя это не объект, а массив.

function Collection(items) {
    this.items = items;
}

Collection.prototype.query = function(key, value) {
    return this.items.filter(function(item) {
        return item[key] == value;
    });
};


var collection = new Collection([{id:1,location:'3'}, {id: 2, location: '3'}]);
alert(JSON.stringify(collection.query('id', '2')));
alert(JSON.stringify(collection.query('location', '3')));

danik.js 28.03.2014 17:34

function Collection(items) {
    this.items = items;
}
 
Collection.prototype.query = function(whereClause) {
    return this.items.filter(function(item) {
        for (var key in whereClause) {
            if (item[key] != whereClause[key])
                return false;
        }
        return true;
    });
};
 
 
var collection = new Collection([{id:1,location:'3'}, {id: 2, location: '3'}]);
alert(JSON.stringify(collection.query({id: 2})));
alert(JSON.stringify(collection.query({location: 3, id: 1})));

Zhazhah 31.03.2014 11:54

Благодарю)


Часовой пояс GMT +3, время: 09:15.