#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