Поиск в объекте JSON с созданной строкой запроса

0

Я пытаюсь найти объект JSON в Angular JS с помощью Lo-Dash. Проблема здесь в том, что моя структура JSON изменится динамически. В результате моя строка поискового запроса также изменится.

Мой JSON имеет формат:

    {       
            "SERIES": "ABC000123123",
            "SECTOR": "E",
            "INDUSTRY": "N31",
            "DURATION": "1A"    }, 

   {        "SERIES": "ABC000123456",
            "SECTOR": "E",
            "INDUSTRY": "N11",
            "DURATION": "12"    }, 

   {        "SERIES": "ABC000456789",
            "SECTOR": "E",
            "INDUSTRY": "N31",
            "DURATION": "1B"    }

Мой JSON также может иметь следующий формат:

{       
            "SERIES": "DEF000321",
            "AREA": "C2",
            "ITEM": "123"    },
{       
            "SERIES": "DEF000321",
            "AREA": "D0",
            "ITEM": "675"    },

Клавиши AREA, ITEM, SECTOR, INDUSTRY и т.д. Будут отличаться.

Во всех вышеприведенных случаях только поле SERIES остается постоянным. Мне нужно передать ключи, пары значений остальных атрибутов, чтобы получить значение SERIES.

Для простоты мой подход с использованием lodash в поиске вышеупомянутого JSON выглядит следующим образом:

_.map(_.filter(JSON_Object, function (value) { 
return (value.AREA == D0) && (value.ITEM == C2) }), 'SERIES');

Где я буду программировать следующую строку:

(значение.AREA == 'D0') && (значение.ITEM == 'C2')

Такой подход не работает. Когда я жестко кодирую значения, он работает нормально. Совсем наоборот, когда я программно генерирую строку запроса.

Я пробовал перебирать список и отфильтровывать один атрибут за раз, но это увеличило бы количество циклов и сложность моего поиска.

Любые предложения/работа вокруг? заранее спасибо

Изменение: Добавлен снимок экрана консоли: введите описание изображения здесь

Теги:
lodash

1 ответ

0
Лучший ответ

Попробуйте этот подход: https://fiddle.jshell.net/koljada/53esaqLz/1/

var JSON_Object = [{
  "SERIES": "ABC000123123",
  "SECTOR": "E",
  "INDUSTRY": "N31",
  "DURATION": "1A"
}, {
  "SERIES": "ABC000123456",
  "SECTOR": "E",
  "INDUSTRY": "N11",
  "DURATION": "12"
}, {
  "SERIES": "ABC000456789",
  "SECTOR": "E",
  "INDUSTRY": "N31",
  "DURATION": "1B"
}];

var query = "(value.SECTOR == 'E') && (value.INDUSTRY == 'N11')";

var result = _(JSON_Object)
  .filter(new Function("value", "return " + query))
  .map('SERIES')
  .value(); // => ["ABC000123456"]
  • 0
    Я продолжаю получать пустой массив, когда я использую ту же функцию. Можете ли вы объяснить обозначение 'var result = _ (JSON_Object) .filter (new Function ("value", "return" + query))'
  • 0
    new Function("value", "return " + query) будет преобразована в function(value) { return (value.SECTOR == 'E') && (value.INDUSTRY == 'N11'); } Поэтому после этого его можно использовать в качестве предиката в фильтре lodash. Как видите, это работает на моей скрипке. Так что будьте осторожны с вашим запросом!
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню