Я ищу в функциональном программировании, где у меня есть следующий код до сих пор:функционального программирования изменить два элемента в массиве
const R = require('ramda')
const original = {
words: [
{ duration: '0.360000', name: 'Arthur', position: '0.660000' },
{ duration: '0.150000', name: 'the', position: '1.020000' },
{ duration: '0.380000', name: 'rat', position: '1.170000' },
{ duration: '0.770000', name: '.', position: '1.550000' }
]
}
// 1. convert position and duration to int and multiply by 100
const makeInteger = a => parseFloat(a) * 100
const words = R.lensPath(['words'])
log('position', R.over(words, R.map(R.over(position, makeInteger)), original).words)
возвращается:
position: [
{
duration: '0.360000',
name: 'Arthur',
position: 66
},
{
duration: '0.150000',
name: 'the',
position: 102
},
{
duration: '0.380000',
name: 'rat',
position: 117
},
{
duration: '0.770000',
name: '.',
position: 155
}
]
Как изменить как duration
и position
в той же функции, чтобы сделать их целыми?
После этого у меня была бы эта функция, когда я передаю индекс и обновляю все positions
после этой точки.
В принципе, мне нравится смещать смещение «положение» в зависимости от объекта, где была изменена «продолжительность»?
const pos = R.over(words, R.map(R.over(position, makeInteger)), original)
const y = (i) => R.slice(i, Infinity, pos.words)
const foo = R.adjust(R.add(-2), 0, y(1))
log(foo)
И я получил
[
NaN,
{
duration: '0.150000',
name: 'the',
position: 102
},
{
duration: '0.380000',
name: 'rat',
position: 117
},
{
duration: '0.770000',
name: '.',
position: 155
}
]
Так я вроде застрял на том, как смещение позиции.
Любые советы очень ценятся.
хороший, идеальный – khinester
ответ @ scott-sauyet довольно штопор хороший. его использование 'lift' с' concat' (хорошо с любой n-ary> 1 функцией) является супер мощным шаблоном для ramda при работе со списками. –