Упрощенный вопрос: у меня есть массив ['a', 'b', 3, 'c']
, и я хочу изменить 3
на null, null, null
, как это ['a', 'b', null, null, null, 'c']
как мне это сделать с Рамдой?
это мой полный код
const R = require('ramda')
const getBoardStateFromBoardString = R.pipe(
R.split(''),
R.map(
R.cond([
[
R.test(/[bfmterk]/),
R.assoc('piece', R.__, { color: 'b' })
],
[
R.test(/[BFMTERK]/),
R.assoc('piece', R.__, { color: 'w' })
],
[
R.test(/\d/),
R.pipe(
R.assoc('padding', R.__, {}),
R.evolve({ padding: parseInt })
)
],
[
R.equals('/'),
R.always({ padding: 8 })
]
])
),
)
console.log(getBoardStateFromBoardString('rmtektmr/8/bbbbbbbb/8/8/BBBBBBBB/8/RMTKETMR'))
результат
[
{ color: 'b', piece: 'r' },
{ color: 'b', piece: 'm' },
{ color: 'b', piece: 't' },
{ color: 'b', piece: 'e' },
{ color: 'b', piece: 'k' },
{ color: 'b', piece: 't' },
{ color: 'b', piece: 'm' },
{ color: 'b', piece: 'r' },
{ padding: 8 },
{ padding: 8 },
{ padding: 8 },
{ color: 'b', piece: 'b' },
...
]
Я хочу сопоставить один {padding: 8} с 8 ноль , как это ...
[
{ color: 'b', piece: 'r' },
{ color: 'b', piece: 'm' },
{ color: 'b', piece: 't' },
{ color: 'b', piece: 'e' },
{ color: 'b', piece: 'k' },
{ color: 'b', piece: 't' },
{ color: 'b', piece: 'm' },
{ color: 'b', piece: 'r' },
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
{ color: 'b', piece: 'b' },
...
]
Итак, я написал код, который мне нужен без Рамды, вот так ...
function getBoardStateFromBoardString(boardString) {
const boardState = Array(128)
let i = 0
for (const symbol of boardString) {
if (/[bfmterk]/.test(symbol)) {
boardState[i] = {
piece: symbol,
color: 'b'
}
i++
} else if (/[BFMTERK]/.test(symbol)) {
boardState[i] = {
piece: symbol,
color: 'w'
}
i++
} else if (/\d/.test(symbol)) {
i += parseInt(symbol, 10)
} else if (symbol === '/') {
i += 8
}
}
return boardState
}
Но я понятия не имею, как это сделать с Рамдой (если возможно, со стилем без точек) )