@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
90 lines (88 loc) • 5.51 kB
JavaScript
/**
* CodeAnalizerComment: Updated 2 imports on 2024-09-22 02:56:43
* Update:: import { IWordSummary } to '@mikezimm/fps-core-v7/lib/components/atoms/WordSummary/IWordSummary;'
* Update:: import { IWordObject } to '@mikezimm/fps-core-v7/lib/components/atoms/WordSummary/IWordSummary;'
*/
/**
* CodeAnalizerComment: Updated 7 imports on 2024-09-21 23:07:24
* Update:: import { sortObjectArrayByNumberKey } to '@mikezimm/fps-core-v7/lib/logic/Arrays/sorting/numbers;'
* Update:: import { sortObjectArrayByChildNumberKey } to '@mikezimm/fps-core-v7/lib/logic/Arrays/sorting/objects;'
* Update:: import { getArrayOfWordsFromString } to '@mikezimm/fps-core-v7/lib/logic/Strings/getWordsFromString;'
* Update:: import { startPerformOpV2 } to '@mikezimm/fps-core-v7/lib/components/molecules/Performance/functions;'
* Update:: import { updatePerformanceEndV2 } to '@mikezimm/fps-core-v7/lib/components/molecules/Performance/functions;'
* Update:: import { IAnySourceItem } to '@mikezimm/fps-core-v7/lib/components/molecules/AnyContent/IAnyContent;'
* Update:: import { IAnySourceItemAny } to '@mikezimm/fps-core-v7/lib/components/molecules/AnyContent/IAnyContent;'
*/
// import { IAnySourceItem, sortObjectArrayByNumberKey } from '../../../fpsReferences';
// import { getArrayOfWordsFromString } from './getWordsFromString';
// import { startPerformOpV2, updatePerformanceEndV2 } from '@mikezimm/fps-library-v2/lib/components/molecules/Performance/functions';
import { sortObjectArrayByNumberKey } from "../../../logic/Arrays/sorting/numbers";
import { sortObjectArrayByChildNumberKey } from "../../../logic/Arrays/sorting/objects";
import { getArrayOfWordsFromString } from "../../../logic/Strings/getWordsFromString";
import { startPerformOpV2, updatePerformanceEndV2 } from "../../molecules/Performance/functions";
export function buildWordSummary(items, findWordsProp, splitWords, sortKey, minLength, exclusionsLC, sumProp = '') {
const processOp = startPerformOpV2({ label: 'buildWordCount', includeMsStr: true });
let skippedWords = 0;
const wordSummary = {
// 2024-09-22: Added as IPerformanceOp to pass linting
words: [], wordObjs: [], searchTextLC: [], skipped: [], performance: processOp
};
items.map((item, itemIdx) => {
const itemSourceString = findWordsProp.map(prop => { return item[prop] ? item[prop] : ''; });
const testString = itemSourceString.filter(item => { return item && item.length > 0; }).join(` `);
// https://github.com/mikezimm/Compliance/issues/177
// if (testString.indexOf('(') > -1) {
// console.log(`buildWordSummary`, testString);
// }
const itemWords = splitWords === true ? getArrayOfWordsFromString(testString, true, true, true, 'asis') : [testString];
itemWords.map(word => {
const searchTextLC = word.toLocaleLowerCase();
// for https://github.com/mikezimm/Compliance/issues/132
const isExcluded = !exclusionsLC || exclusionsLC.length === 0 ? false :
exclusionsLC.indexOf(searchTextLC) > -1 ? true : false;
if (isExcluded === false && word.length >= minLength) {
let wordIdx = wordSummary.searchTextLC.indexOf(searchTextLC);
// Add new words to summary
if (wordIdx === -1) {
wordSummary.words.push(word);
wordSummary.searchTextLC.push(searchTextLC);
const wordObj = {
word: word,
searchTextLC: searchTextLC,
count: 0,
sum: 0,
avg: 0,
sourceIndexes: [],
sourceStrings: [],
originalIndex: wordSummary.words.length,
};
wordSummary.wordObjs.push(wordObj);
wordIdx = wordSummary.words.length - 1;
}
// Now update count, sum and avg
wordSummary.wordObjs[wordIdx].count++;
wordSummary.wordObjs[wordIdx].sourceIndexes.push(itemIdx);
wordSummary.wordObjs[wordIdx].sourceStrings.push(itemSourceString.join('; '));
wordSummary.wordObjs[wordIdx].sum += sumProp && item[sumProp] ? item[sumProp] : 0;
wordSummary.wordObjs[wordIdx].avg = wordSummary.wordObjs[wordIdx].sum / wordSummary.wordObjs[wordIdx].count;
}
else {
skippedWords++;
if (wordSummary.skipped.indexOf(word) === -1)
wordSummary.skipped.push(word);
}
});
});
wordSummary.wordObjs = sortObjectArrayByChildNumberKey(wordSummary.wordObjs, 'desc', sortKey);
// Resort the words by the given sort
wordSummary.words = wordSummary.wordObjs.map(wordOb => { return wordOb.word; });
// 2024-09-22: Added as IPerformanceOp to pass linting
wordSummary.performance = updatePerformanceEndV2({ op: processOp, updateMiliseconds: true, count: items.length });
console.log('Skipped words:', skippedWords, wordSummary.performance);
return wordSummary;
}
export function updateWordSort(wordSummary, sortKey) {
wordSummary.wordObjs = sortObjectArrayByNumberKey(wordSummary.wordObjs, 'desc', sortKey);
return wordSummary;
}
//# sourceMappingURL=buildWordSummary.js.map