【发布时间】:2020-06-25 14:51:43
【问题描述】:
简单的问题是我有数组 ['a', 'b', 3, 'c'] 并且我想将 3 更改为 null, null, null 像这样 ['a', 'b', null, null, null, 'c'] 我如何使用 Ramda 来做到这一点?
这是我的完整代码
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 null ...
[
{ 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' },
...
]
所以我写了我想要的没有 Ramda 的代码...
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
}
但我不知道如何处理 Ramda(如果可能的话,使用无点样式)?
【问题讨论】:
标签: javascript functional-programming ramda.js