다음 Ramda REPL 에서 ramda를 살펴보고 t 질문이 있습니다 .
const R = require('ramda')
//const original = require('./test/fixtures/original.json')
const original = {
speakers: {
name: 'Author',
words: [
{ duration: '0.360000', name: 'Arthur', time: '0.660000', paragraph: 'p0-0' },
{ duration: '0.150000', name: 'the', time: '1.020000', paragraph: 'p0-0' },
{ duration: '0.380000', name: 'rat', time: '1.170000', paragraph: 'p0-0' },
{ duration: '0.770000', name: '.', time: '1.550000', paragraph: 'p0-0' },
{ duration: '0.360000', name: 'Arthur', time: '89.820000', paragraph: 'p1-0' },
{ duration: '0.390000', name: 'stood', time: '90.180000', paragraph: 'p1-0' },
{ duration: '0.090000', name: 'and', time: '90.570000', paragraph: 'p1-0' }
]
}
}
const words = R.lensPath(['speakers', 'words'])
const wordsList = R.view(words, original)
const result = [...wordsList.reduce((hash, { duration, time, name, paragraph }) => {
const current = hash.get(paragraph) || { paragraph, words: [] };
current.words.push({ duration, time, name });
return hash.set(paragraph, current);
}, new Map).values()];
console.log(result);
groupBy
위의 방법 대신 단락별로 그룹화하려면 어떻게 사용 합니까?
이 결과에서 모든 단어를 시간 순서대로 정렬하고 일치하는 단락 만 반환하여 하나 이상의 항목을 포함 할 수있는 문자열을 찾으려면 어떻게해야합니까?
search_criteria = 'Arthur stood';
results = [
{ para: 'p1-0',
words: [
{ 'name': 'Arthur', 'time': 89.820000},
{ 'name': 'stood', 'time': 90.180000}
}
]
이러한 항목을 replace = 'Arthuro stopped'
어떻게 대체 하시겠습니까?
어떤 조언이라도 대단히 감사합니다.
Ramda의 첫 번째 문제를 해결하는 한 가지 방법은 다음과 같습니다.
pipe(
view(lensPath(['speakers', 'words'])), // original.speakers.words (null-safe)
groupBy(prop('paragraph')), // object with keys of para name, values of list of matching records
map(map(dissoc('paragraph'))), // removing unneeded para from records
toPairs, // {p1: [...words1], p2: [...words2]} => [[p1, [...words1]], [p2, [...words2]]]
map(zipObj(['paragraph', 'words'])) // expected output structure
)(original)
에 대해 구체적으로 질문하셨습니다 groupBy
. groupBy(prop('paragraph'))
절 뒤의 데이터는 다음과 같습니다.
{
"p0-0": [
{duration: "0.360000", name: "Arthur", paragraph: "p0-0", time: "0.660000"},
{duration: "0.150000", name: "the", paragraph: "p0-0", time: "1.020000"},
{duration: "0.380000", name: "rat", paragraph: "p0-0", time: "1.170000"},
{duration: "0.770000", name: ".", paragraph: "p0-0", time: "1.550000"}
],
"p1-0": [
{duration: "0.360000", name: "Arthur", paragraph: "p1-0", time: "89.820000"},
{duration: "0.390000", name: "stood", paragraph: "p1-0", time: "90.180000"},
{duration: "0.090000", name: "and", paragraph: "p1-0", time: "90.570000"}
]
}
나머지는 찾고있는 출력 구조를 얻기 위해 애쓰는 것입니다.
Ramda REPL 에서 결과를 볼 수 있습니다 . (파이프에서 이후 줄을 주석 처리하면 중간 결과를 볼 수 있습니다.)
질문의 후반부에서는 지금까지 시도한 내용을 보여주는 새로운 주제를 여는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다