Hello, i am a beginner, I have a problem, use JS:
const arr = [[1, 2], [3, 4]]
console.log([{y:0, x: 1}, {y:1, x: 2}].filter(({ y, x })=> arr[y]?.[x] ))
I tried to use rescript, but it didn’t have the desired effect
You forgot to handle a possible case here, for example: [| |]
let arr = [[1, 2], [3, 4]]
Js.log( Js.Array2.filter([{y:0, x: 1}, {y:1, x: 2}], ([y, x]) => Some(arr[y][x]) !== None))
What should I do
let arr = [[1, 2], [3, 4]]
[{y: 0, x: 1}, {y: 1, x: 2}]
->Js.Array2.filter(({y, x}) =>
switch arr->Belt.Array.get(y) {
| Some(arrY) => arrY->Belt.Array.get(x)->Belt.Option.isSome
| None => false
}
)
->Js.log
fham
3
You can also open Belt
to implicitly use Belt.Array.get
with the array access syntax:
let arr = [[1, 2], [3, 4]]
[{y: 0, x: 1}, {y: 1, x: 2}]
->Js.Array2.filter(({y, x}) => {
open Belt
switch arr[y] {
| Some(arrY) => arrY[x]->Option.isSome
| None => false
}
})
->Js.log
1 Like
DZakh
4
I’d write it like this
let arr = [[1, 2], [3, 4]]
[{y: 0, x: 1}, {y: 1, x: 2}]
->Js.Array2.filter(({y, x}) =>
arr
->Belt.Array.get(y)
->Belt.Option.flatMap(Belt.Array.get(_, x))
->Belt.Option.isSome
)
->Js.log
2 Likes