Перебирать объект и фильтровать заданное значение в данном свойстве javascript

Я посмотрел онлайн и не смог найти подробного ответа на мой вопрос. У меня есть объект, который выглядит примерно так:

 {
"00001": {
    "sid": "00001",
    "oid": "00001",
    "name": "operation 0001 service 1",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {
        "00001": {
            "pid": "00001",
            "name": "parameter 00001 operation 0001 service 1",
            "description": "test parameter 000001",
            "type": "something"
        }
    }
},
"00002": {
    "sid": "00002",
    "oid": "00002",
    "name": "operation 0001 service 2",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {}
},
"00003": {
    "sid": "00003",
    "oid": "00003",
    "name": "operation 0001 service 3",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {}
},
"00004": {
    "sid": "00004",
    "oid": "00004",
    "name": "operation 0001 service 4",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {}
},
"00005": {
    "sid": "00005",
    "oid": "00005",
    "name": "operation 0001 service 5",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {}
},
"00006": {
    "sid": "00001",
    "oid": "00006",
    "name": "operation 0001 service 6",
    "description": "test operation 000001",
    "returntype": "something",
    "parameters": {}
}
}

Я пытаюсь перебрать объекты и быть в состоянии вернуть те, которые имеют определенный sid (т.е. 00001). Я знаю, что в javascript есть значение для var в obj, но я не уверен, как его реализовать, чтобы получить желаемый вывод. Любая помощь или руководство будут оценены.

2 ответа

Решение

Если вы знаете, что это только один уровень глубины (совпадения "sid" будут найдены только на первом уровне объектов, и вы также не будете искать вложенные объекты), то это более просто:

function findMatches(data, prop, val) {
    var item, matches = [];
    for (var obj in data) {
        item = data[obj];
        if (item[prop] === val) {
            matches.push(item);
        }
    }
    return matches;
}

var result = findMatches(myData, "sid", "00001");

Рабочая демонстрация: http://jsfiddle.net/jfriend00/s5xg1khy/

Рекурсия - это путь. Смотрите ответ @TJ Crowder. Проходите через вложенные объекты с помощью jQuery.

Другие вопросы по тегам