Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Найти максимально близкое минимальное число из многомерного массива (https://javascript.ru/forum/misc/73041-najjti-maksimalno-blizkoe-minimalnoe-chislo-iz-mnogomernogo-massiva.html)

the_little 17.03.2018 23:09

Цитата:

Сообщение от j0hnik (Сообщение 480833)
а в excel откуда импортировали?

Я брал прайс, из него копировал часть данных в отдельную книгу Эксель, сохранял в csv.

j0hnik 17.03.2018 23:49

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

the_little 19.04.2018 14:26

Цитата:

Сообщение от j0hnik (Сообщение 480836)
the_little,
Понятно, я сталкивался с похожим калькулятором непрактичный жуть, изменились цены на комплектующие маленькие ворота дорожают сильней, и сиди возись, а был бы норм алгоритм (с исходной программы) просто правиш определенный коэффициент и все. (потому как бухгалтера эти таблицы составлять особо не спешат) у них типа своих забот полон рот

Сейчас по окнам делаю. Так там размеры от 500 до 2000+ метров. С шагом 10мм. И по каждому типу (1-2-3 створки, эконом, стандарт, премиум) свои таблицы...
Я конечно сделал через парсер считывание этих таблиц. Но все равно не понимаю, как так можно считать...
Ну там же площадь. Сделать расчет от площади + коэффициенты какие-нибудь и все...
Я не представляю как будут эти таблицы перечитывать))

the_little 19.04.2018 14:29

Возник вопрос с поиском нужного элемента в массива.
Вот код, которым пользуюсь.
function checkArr(arr,a,b) {
      return arr[arr.findIndex(el=>el[0]>a)-1][arr[0].findIndex(el=>el>b)-1];
    }

Я так понимаю смысл такой. Находится элемент который больше заданного значения, и потом индекс уменьшается на 1.
Тогда задача так и стояла, если значение попадает между 2-х заданных, считать по меньшему.
Все работает как надо.

Сейчас задача обратная. Считать по большему.
Я попробовал изменить функцию на такую (вроде как должен искать меньшее и потом индекс увеличивать на 1), но выдает всегда минимальное значение...
function checkArr(arr,a,b) {
      return arr[arr.findIndex(el=>el[0]<a)+1][arr[0].findIndex(el=>el<b)+1];
    }

the_little 19.04.2018 14:34

сейчас кажется дошло...
он же начинает искать с первого значения, и соответсвенно натыкается сразу на самое первое, которое получается меньше заданного.
Поэтому он и выдает при любых заданных - самое минимальное....
Хмм, надо что-то переписать наверное. Такая логика уже не сработает...

МОжно ему как то сказать, чтобы он от максимального значения шел?

the_little 19.04.2018 14:39

блин, там же просто можно убрать -1

the_little 19.04.2018 14:42

return arr[arr.findIndex(el=>el[0]>=a)][arr[0].findIndex(el=>el>=b)];

the_little 19.04.2018 14:55

заметил непонятный баг
Диапазон ширины в одном массиве 600-1800.
Пока задается ширина меньше 1000, считает нормально. Как только вписываешь 1000 или больше - выдает первый столбец...

Как такое может быть?

the_little 19.04.2018 15:06

Проверил на первой функции, которая на другом массиве работала нормально.
function checkArr(arr,a,b) {
      return arr[arr.findIndex(el=>el[0]>a)-1][arr[0].findIndex(el=>el>b)-1];
    }


тоже глючит. До каких-то значений работает нормально, потом дает сбой...
Может из-за парсера..., но такие таблицы руками в массив загонять дело не благодарное...

the_little 19.04.2018 15:21

Дело не в парсере... Массив проверил. в многомерном массиве 52 массива, в каждом 122 элемента.
Запросил data[51][121] - выдал правильное угловое значение. Т.е. весь массив заносится там куда-то. парсится таблица нормально.
Видимо в функции какая-то проблема, но в чем понять не могу.


Часовой пояс GMT +3, время: 07:42.