У меня есть массив строк, которые являются тегами сообщений в блоге из базы данных.
Это пример конечного результата запроса:
["apple","banana", "apple", "orange","grapes","mango","banana"];
Мне нужно знать, сколько раз строка повторяется в этом массиве, поэтому я могу создать своего рода облако тегов.
Конечный конечный результат должен выглядеть так: [{name:"apple",count:2}, {name:"banana", count:2}, {name: "orange",count:1}...];
Я использую lodash в своем проекте и хотел бы использовать его, если это возможно. простой javascript тоже прекрасен.
Вы можете использовать groupBy для тяжелого подъема, а затем использовать карту для форматирования результата по своему вкусу:
const data = ["apple", "banana", "apple", "orange", "grapes", "mango", "banana"];
const result = _.values(_.groupBy(data)).map(d => ({name: d[0], count: d.length}));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Используйте reduce
и map
var input = ["apple","banana", "apple", "orange","grapes","mango","banana"];
var map = input.reduce( (a,c) => ( a[c] = a[c] || 0, a[c]++, a ) ,{});
var output = Object.keys( map ).map( s => ({name: s, count:map[s]}) );
демонстрация
var input = ["apple", "banana", "apple", "orange", "grapes", "mango", "banana"];
var map = input.reduce((a, c) => (a[c] = a[c] || 0, a[c]++, a), {});
var output = Object.keys(map).map(s => ({
name: s,
count: map[s]
}));
console.log(output);
Чтобы подсчитать использование _.countBy()
, преобразуйтесь в запрошенную форму с помощью _.entries()
и сопоставьте кортежи с объектами:
const data = ["apple", "banana", "apple", "orange", "grapes", "mango", "banana"];
const result = _.entries(_.countBy(data)).map(([name, count]) => ({ name, count }));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Создайте карту, имя сопоставления для подсчета. Прокрутите список по каждому элементу, если его "на карте", увеличьте его количество, иначе установите его значение в единицу.
if (tag in map) { map[tag] += 1 }
else { map[tag] = 1 }
Затем вы можете выполнить итерацию карты и преобразовать ее в список объектов.