Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор значения из таблицы, Есть таблица с ценами нужно найти нужную 
V
    Опции темы
Vardoulacha
Дата 19.3.2013, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Порылся в интернете, но не нашел решения, может у кого есть готовое решение, чтобы не изобретать велосипед.

Есть таблица в екселе
столбцы ширина и строки Высота

Код

      2250      2375      2500
2085  531       563       565
2210  550       583       595
2335  566       600       624


2250 2375 2500 - это ширина
2085 2210 2335 - это высота
остальное это цены

имеем на входе любые значения высоты и ширины, нужно найти какая ячейка с ценой соответствует этим параметрам

Это сообщение отредактировал(а) Vardoulacha - 19.3.2013, 07:43
PM MAIL   Вверх
Aliance
Дата 19.3.2013, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Как Excel связан с JS?
PM MAIL WWW ICQ Skype   Вверх
Vardoulacha
Дата 19.3.2013, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Aliance @  19.3.2013,  10:22 Найти цитируемый пост)
Как Excel связан с JS? 

Никак не связан, данные просто начальные там есть. их надо будет перенести в JS в какую-нибудь структуру, может в объект может в массив (вариантов несколько), а потом надо как-то использовать эту информацию чтобы получить нужные данные.

Пока что придумал только такое решение
1) засовываем высоту в массив ID1 = значение
2) ширину в другой массив ID2 = значение
3) третий массив состоит из ключей ID1+ID2 (перечисление всех возможных вариантов) и значения которое должно быть
4) затем получим на входе ширину и высоту находим ID1 и ID2 складываем их и ищем есть ли такая пара в массиве значений, если есть то показываем значение, если нет методом округлений подгоняем результат под существующие значения

понятно что костыль, вот и спрашиваю может кто такое уже делал, если нет сам сделаю через это костыль
PM MAIL   Вверх
Aliance
Дата 19.3.2013, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Если абстрагироваться от задачи переноса данных из Excel`я, то задача сводится к понятию двумерного ассоциативного массива (в js это просто двумерный объект):

Код

var data = {
   2250: {
      2085: 531,
      2210: 550,
      2335: 566
   },
   2375: {
      2085: 563,
      2210: 583,
      2335: 600
   },
   2500: {
      2085: 565,
      2210: 595,
      2335: 624
   },
};

alert( data[2375][2335] ); // выведет 600

PM MAIL WWW ICQ Skype   Вверх
Vardoulacha
Дата 20.3.2013, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Aliance @  19.3.2013,  12:16 Найти цитируемый пост)
Если абстрагироваться от задачи переноса данных из Excel`я, то задача сводится к понятию двумерного ассоциативного массива (в js это просто двумерный объект):

Ну да, как данные попадут в JS это не вопрос, про двумерный массив я не подумал, удобно, спасибо за наводку
PM MAIL   Вверх
Vardoulacha
Дата 21.3.2013, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Ну вот так вот я решил задачу

Код

// Начальные данные
var prices = {
    2250: {
        2085: 531,
        2210: 550,
        2335: 566,
        2460: 601,
        2585: 616,
        2710: 644,
        2835: 658,
        2960: 678,
        3085: 694
    },
    2375: {
        2085: 563,
        2210: 583,
        2335: 600,
        2460: 626,
        2585: 658,
        2710: 684,
        2835: 704,
        2960: 726,
        3085: 742
    },
    2500: {
        2085: 565,
        2210: 595,
        2335: 624,
        2460: 631,
        2585: 680,
        2710: 706,
        2835: 728,
        2960: 749,
        3085: 769
    },
    2625: {
        2085: 600,
        2210: 622,
        2335: 637,
        2460: 676,
        2585: 701,
        2710: 728,
        2835: 750,
        2960: 770
    }
};

// Находим ширину
var widthMin = 1000000;
var widthMinKey = 0;
for (var keyWidth in prices)
{
    if (Math.abs(keyWidth - calcWidth) < widthMin)
    {
        widthMin = Math.abs(keyWidth - calcWidth);
        widthMinKey = keyWidth;
    }
}

// Находим высоту
var heightMin = 1000000;
var heightMinKey = 0;
for (var keyHeight in prices[widthMinKey])
{
    if (Math.abs(keyHeight - calcHeight) < heightMin)
    {
        heightMin = Math.abs(keyHeight - calcHeight);
        heightMinKey = keyHeight;
    }
}

alert(prices[widthMinKey][heightMinKey]);

PM MAIL   Вверх
Aliance
Дата 21.3.2013, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Что-то не то получилось. Изначалньо была приведена таблица 3х3, где все стороны равны - а значит выбирать для первого и второго уровня массива было все равно какую. Когда стороны не равны - лучше выбирать большую для первого уровня, экономия получится. У тебя наоборот получилось, у тебя 4 элемента первого уровня (2250, 2375, 2500 и 2625), и около 9 элементов второго. Лучше сделать наоборот. НО! Этот совет касается ситуации, когда твои элементы второго уровня были бы идентичны в элементах первого уровня. У тебя я такого не вижу (например, в 2625 нет 3085). Это либо значит что в первом посте ты привел слишком абстрактные данные, либо в полученном коде не проставляешь нули там, где данных нет.

Весь мой пост сводился не к тому, что ты сделал не правильно (работает и хорошо), а к тому, как было бы можно сделать в идеале. Как-то так)
PM MAIL WWW ICQ Skype   Вверх
Vardoulacha
Дата 23.3.2013, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Aliance @  21.3.2013,  11:56 Найти цитируемый пост)
Что-то не то получилось.

В первом посте я для примера сократил таблицу до трех значений, на самом деле это только лишь одна из трех таблиц, вторая раза в три длиннее во втором уровне, а третья в три раза длиннее в первом уровне и в 10 раз длиннее во втором уровне.

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

Это сообщение отредактировал(а) Vardoulacha - 23.3.2013, 06:28
PM MAIL   Вверх
Aliance
Дата 25.3.2013, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Тогда есть смысл привести не абстрактные значения, а конкретные. И написать ожидаемые результаты.
PM MAIL WWW ICQ Skype   Вверх
Vardoulacha
Дата 25.3.2013, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Aliance @  25.3.2013,  10:55 Найти цитируемый пост)
Тогда есть смысл привести не абстрактные значения, а конкретные. И написать ожидаемые результаты. 

я уже решил задачу, и привел в решении конкретные значения
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.