Найти комбинацию всех значений с плавающей запятой, округленных вверх и вниз в массиве Javascript - PullRequest
1 голос
/ 22 января 2020

Итак, у меня есть логическая проблема, и я не могу ее решить. Поэтому в основном мне нужно найти комбинацию всех чисел с плавающей точкой, присутствующих в массиве, округленных в большую и меньшую сторону.

Например, у меня есть этот массив [2.5,1.3]. Итак, мне нужна комбинация [3,2] [3,1] [2,2] [2,1] (Таким образом, в первом массиве оба значения округляются в большую сторону, во втором - первое значение округляется в большую сторону и вторая округляется в меньшую сторону, в третьей первая величина округляется в меньшую сторону, а вторая округляется в большую сторону, а в четвертой обе округляются в меньшую сторону).

В качестве другого примера представьте, что у меня есть [4.5,1.7 , 3.4] Таким образом, результат должен быть: [4,2,4] [4,1,4] [4,1,3] [5,1,3] [5,1,4] [5,2,4 ] [5,2,3] и так далее,

Я должен сделать это для n элементов, и любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 22 января 2020

Вы можете получить массив массивов с округленными вверх и вниз значениями и получить его декартово произведение.

const
    getCeilFloor = array => array.map(v => ['ceil', 'floor'].map(k => Math[k](v))),
    getCartesian = array => array.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), [])),


getCartesian(getCeilFloor([2.5, 1.3])).forEach(a => console.log(...a));
getCartesian(getCeilFloor([4.5, 1.7, 3.4])).forEach(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }
...