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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> связь по полям ассоциированных двумерных масивов 
:(
    Опции темы
WiB
Дата 29.10.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может, и просто это сделать, но как — не могу понять.

есть два массива:
Код

lang=new Array()
lang["Name"]=new Array("nom","vorname");
lang["Surname"]=new Array("famille","zuname");
lang["en"]=new Array("fr","de");

person=new Array()
person["Name"]="Петр";
person["Surname"]="Иванов";
person["en"]="de";


Вопрос: как вывести результат
Код

vorname:Петр
zuname:Иванов

заранее благодарю за ответ.

Это сообщение отредактировал(а) WiB - 29.10.2006, 22:23
PM MAIL   Вверх
SelenIT
Дата 29.10.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



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

lang = {
   en: { Name: "Name", Surname: "Surname" },
   fr: { Name: "nom", Surname: "famille" },
   de: { Name: "Vorname", Surname: "Zuname" }
}

Тогда нужную языковую константу сразу можно будет выцепить по ключу, напр. lang[person["en"]]["Name"].

Это сообщение отредактировал(а) SelenIT - 29.10.2006, 13:41


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 29.10.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

Репутация: 27
Всего: 52



А я вот так сделал ;) :
Код

var lang = {
  en : ['name', 'surname'],
  fr : ['nom', 'famille'],
  de : ['vorname', 'zuname']
},
person = {
  lang : 'de',
  init : ['Илья', 'Стрельцын'] 
},
a = lang[person.lang], 
b = person.init;
alert(a[0] + ' : ' + b[0] + '\n' + a[1] + ' : ' + b[1]);

В alert'е - что-то, типа желаемого результата:
Код

vorname : Илья
zuname : Стрельцын

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


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



AKS, по "детективной" части - 1:0 в Вашу ;)
Но по JS-ной осмелюсь не соглавиться - все-таки при большом количестве языковых констант имхо искать нужную по имени легче, чем по номеру.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 29.10.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

Репутация: 27
Всего: 52



SelenIT, 
Цитата

искать нужную по имени легче, чем по номеру

Вы о поиске какого-либо значения в таком массиве, как lang.en, например? Соглашусь, конечно!
Хотя я для себя все равно бы так и оставил. По ходу дела ведь все индексы выучишь наизусть, не так ли...
PM MAIL   Вверх
WiB
Дата 29.10.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пример пришлось придумывать на ходу, согласен, получилось криво. извиняюсь.
на самом деле пытаюсь портировать с php и объяснять вроде дольше, там используется нечто вроде:
Код

    foreach (array_reverse($delta) as $k=>$n) {
      if (!$n) continue;
      $parts[] = Date_DeltaRussian::declension($n, $this->intervals[$k]);

, где в $delta записано время в виде:
Код

delta["hrz"]=23;
delta["mnz"]=59;
delta["scz"]=59;

а функция declension (в моём случае — pluform) подставляет в зависимости от названия (hrz) и значения (4) правильную форму слова «час» (часов), для «mnz» и «31» — «минута», для «scz» и «33» — «секунды».

…раз пошла такая пьянка. для чего это всё: в «о сессии» выводить: «текущая сессия длится» и время, которое берётся как разница между временем начала сессии на сервере и текущем временем на клиенте, причём хочется писать «3 дня 8 часов» или там «1 месяц 15 дней» с ограничением сколько позиций, т.е. «1 год 2 месяца 6 дней» — ограничение = 3.
…ну и коль яваскрипт — чтоб если «3 минуты 21 секунда» — чтоб каждую секунду обновлялось. а если «1 день 4 часа» — каждый час.

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

то, что есть пока что:
Код

function pluform(pfn, pf1, pf2, pf5) {
  pfn = Math.abs(pfn) % 100;
  pfn1 = pfn % 10;
  if (pfn > 10 && pfn < 20) return pf5;
  if (pfn1 > 1 && pfn1 < 5) return pf2;
  if (pfn1 == 1) return pf1;
  return pf5;//document.write(pluform(1652, 'час', 'часа', 'часов'));
}
function daysmon(dmy, dmm) {
    if (dmm==2) {
    if ((dmy % 400) ==0)
      dm=29;
    else {
      if ((dmy % 100) ==0)
        dm=28;
      else {
        if ((dmy % 4)==0)
          dm=29;
        else
          dm=28;
      }
    }
  }  
  else if ((dmm==4) || (dmm==6) || (dmm==9) || (dmm==11))
    dm=30;
  else
    dm=31;
  return dm;
}
intervals = new Array()
  intervals["scz"] = new Array("секунду", "секунды", "секунд");
  intervals["mnz"] = new Array("минуту", "минуты", "минут");
  intervals["hrz"] = new Array("час", "часа", "часов");
  intervals["dyz"] = new Array("день", "дня", "дней");
  intervals["mnz"] = new Array("месяц", "месяца", "месяцев");
  intervals["yrz"] = new Array("год", "года", "лет");
  from="seconds";
  dtDate = new Date();
  nSec = Math.floor(dtDate.getTime() / 1000);
  first=nSec;
  last=nSec+(60*60*24*31*12);
function Date_DeltaRussian(from) {
  this.from = from;
}
function getDelta(first, last) {
  if (last < first) return false;
  hms = (last - first) % (3600 * 24);
  delta = new Array();
  delta["scz"] = hms % 60;
  delta["mnz"] = Math.floor(hms/60) % 60;
  delta["hrz"]   = Math.floor(hms/3600) % 60;
  last -= hms;
  f=new Date(first*1000);
  l=new Date(last*1000);
  var dYear;
  var dMon;
  var dDay;
  dYear = 0;
  dMon = 0;
  dDay = 0;
  dDay += l.getDate() - f.getDate();
  if (dDay < 0) {
    monlen = daysmon(f.getFullYear(), (f.getMonth()+1));
    dDay += monlen;
    dMon--;
  }
  delta["dyz"] = dDay;
  dMon += (l.getMonth()+1) - (f.getMonth()+1);
  if (dMon < 0) {
    dMon += 12;
    dYear --;
  }
  delta["mnz"] = dMon;
  dYear += l.getFullYear() - f.getFullYear();
  delta['yrz'] = dYear;
  return delta; //document.write("<br>"+delta["scz"]+"s"+delta["mnz"]+"m"+delta["hrz"]+"h"+delta["dyz"]+"d"+delta["mnz"]+"m"+delta["yrz"]+"y<br>");
}

…извиняюсь, что сразу не выложил… критика приветствуется smile

вариант SelenIT сейчас обдумываю smile

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


 




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


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

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