Я пытаюсь найти объект 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')
Такой подход не работает. Когда я жестко кодирую значения, он работает нормально. Совсем наоборот, когда я программно генерирую строку запроса.
Я пробовал перебирать список и отфильтровывать один атрибут за раз, но это увеличило бы количество циклов и сложность моего поиска.
Любые предложения/работа вокруг? заранее спасибо
Изменение: Добавлен снимок экрана консоли: введите описание изображения здесь
Попробуйте этот подход: 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"]
new Function("value", "return " + query)
будет преобразована вfunction(value) { return (value.SECTOR == 'E') && (value.INDUSTRY == 'N11'); }
Поэтому после этого его можно использовать в качестве предиката в фильтре lodash. Как видите, это работает на моей скрипке. Так что будьте осторожны с вашим запросом!