Использование Underscore.js для фильтрации и объединения json

#javascript #json #underscore.js

#javascript #json #underscore.js

Вопрос:

У меня есть вариант использования, в котором мне нужно использовать underscore.js чтобы отфильтровать JSON. Например

 {"test":{
{ key: 1,country:USA,product:A,price:200}
{key: 1,country:USA,product:B,price:200}
{key: 1,country:UK,product:B,price:300}
}
}
  

У меня есть несколько измерений для одного и того же ключа. Мне нужно получить вывод следующим образом, когда я фильтрую США

 {"test":{
{ key: 1,country:USA,price:400}
}
}
  

и когда я фильтрую для продукта B

 {"test":{
{ key: 1,product:B,price:500}
}
}
  

Я хотел бы реализовать это с помощью underscore.js как я полагаю, это быстро по сравнению с чистыми вариантами JS.

Комментарии:

1. Вы можете фильтровать по любому country или product правильно? Или вы можете сделать оба одновременно?

2. Привет, Вивек, я могу фильтровать по продукту или стране одновременно. Идея состоит в том, чтобы получить агрегированные цены для каждого измерения после фильтрации. Спасибо.

3. Что такое «JSON» и какое отношение JSON имеет к вашей проблеме, которая, похоже, связана с простым старым объектом JavaScript?

4. Я хотел бы реализовать это с помощью underscore.js как я полагаю, это быстро по сравнению с чистыми вариантами JS. Почему вы в это верите? Подчеркивание — это просто библиотека, реализованная в «чистом JS», никакой магии там нет.

5. Если вы хотите выполнить агрегацию после фильтрации, пожалуйста, добавьте это требование в свой вопрос, а не помещайте его в комментарий.

Ответ №1:

Я предполагаю, что у вас опечатка, и тест содержит массив объектов:

 var filtered = JSON.parse(jsonString).test.filter(function(item) { return item.country == 'USA' });
var total = 0;

filtered.forEach(function(item) {
    total  = item.price
});
  

Не беспокойтесь о скорости, это будет микрооптимизация, которая не рекомендуется.

Ответ №2:

Во-первых, попробуйте использовать подчеркивание _.filter для применения поиска по вашим критериям, таким как продукт или страна.

Затем выполните агрегацию на основе результата фильтра, просто используя функцию _.each .

Наконец, вы можете манипулировать своим результатом в функции _.map .

Я разместил здесь ссылку на jsfiddle, это может вам помочь

 jsfiddle.net/zusquang/39os1854/
  

Я надеюсь, что это поможет.

Комментарии:

1. Привет, Куанг, спасибо за скрипку! Это именно то, что я искал.

2. Не могли бы вы проголосовать, если мой ответ полезен? @NandakumarUdayakumar