Уменьшить массив. Обрежьте, разделите текст и создайте Набор слов, чтобы получить только уникальные слова. Итерируйте набор с помощью Set.foreach()
и добавьте каждое слово к объекту, если оно не существует. Пу sh текущий id
в массив слов:
const arr = [{"id":1,"text":"Lorem ipsum dolor sit amet consectetur"},{"id":2,"text":"Lorem ipsum dolor sit amet consectetur Dolorem"},{"id":3,"text":"amet consectetur Dolorem"}];
const result = arr.reduce((r, { id, text }) => {
new Set(text.trim().split(/\s+/))
.forEach(w => {
if(!r[w]) r[w] = [];
r[w].push(id);
});
return r;
}, {});
console.log(result);
Без учета регистра и только букв:
const arr = [{"id":1,"text":"Lorem 10 ipsum -- dolor sit amet consectetur"},{"id":2,"text":"Lorem ipsum dolor sit 20 amet! consectetur Dolorem"},{"id":3,"text":"amet consectetur Dolorem!!!"}];
const result = arr.reduce((r, { id, text }) => {
new Set(text.trim().toLowerCase().match(/[a-z]+/g))
.forEach(w => {
if(!r[w]) r[w] = [];
r[w].push(id);
});
return r;
}, {});
console.log(result);