Я надеюсь, что могу ясно выразиться на английском языке и на том, что я хочу создать. Я сначала запускаю с того, что я хочу.
Я хочу сделать IBANcalculator, который может генерировать 1-n IBANnumbers и также проверить данный IBANnumber. IBANnumbers используются во многих странах для оплаты и инструмента, который я хочу сделать, может использоваться для генерации чисел для тестирования цели.
На Википедию (голландский сайт) я нашел список со странами и их способом определить IBANnumber. Что я хочу сделать это для создания своего рода массива, который содержит все страны с их именем, кодом, там IBANlength, bankingformat и формат учетной записи.
Массив должен привыкнуть к:
Я не знаю, является ли массив лучшим способом, но это - до сих пор большая часть знания, которое я имею.
Я уже сделал таблицу как это, которое содержит информацию (эта таблица не используется anyware, но это был хороший способ для меня показать Вам, что я имею в виду о том, как структура):
countryname
country code
valid IBAN length
Bank/Branch Code (check1, bank, branch)
Account Number (check2, number, check3)
Andorra
AD
24
0 4n 4n
0 12 0
België
BE
16
0 3n 0
0 7n 2n
Bosnië-Herzegovina
BA
20
0 3n 3n
0 8n 2n
и многое другое.
Я бы вообще не использовал для этого «массив». Объекты JavaScript - это карты (иногда называемые «ассоциативными массивами», но давайте использовать «карту», чтобы избежать путаницы с массивами с числовой индексацией), поэтому вы можете довольно легко сделать это с простыми объектами:
var IBANInfo = {
"AD": {
countryCode: "AD",
countryName: "Andorra",
length: 24,
bankBranchCode: "0 4n 4n",
accountNum: "0 12 0"
},
"BE": {
countryCode: "BE",
countryName: "Belgi\u00EB",
length: 16,
bankBranchCode: "0 3n 0",
accountNum: "0 7n 2n"
},
"BA": {
countryCode: "BA",
countryName: "Bosni\u00EB-Herzegovina",
length: 20,
bankBranchCode: "0 3n 3n",
accountNum: "0 8n 2n"
}
};
(Обратите внимание, что я использовал Экранирование Unicode для 'e' с умлаутом над ним; вероятно, к лучшему, хотя, если вы будете осторожны с кодировками, все будет в порядке.)
Здесь используется буквальная нотация объекта для создания отдельных объектов и всей карты. . На общей карте есть свойство для каждой страны, где ключом свойства является код страны, а значением свойства является объект, предоставляющий информацию из вашей таблицы.
Затем вы можете искать информацию о стране на карте, используя ее код страны, например:
var countryInfo = IBANInfo["AD"]; // <= Example for Andorra
Или, если у вас есть код страны в другой переменной:
var countryCode = "AD"; // <= Example for Andorra
var countryInfo = IBANInfo[countryCode];
alert("Country name: " + countryInfo.countryName); // <= Alerts "Country name: Andorra"
Очевидно, если вы предпочитаете искать по чему-то другому, кроме страны код, просто настройте вещи соответствующим образом.
Когда я делаю это с информацией, над которой я мало контролирую, я обычно добавляю префикс к ключу, чтобы избежать проблем, связанных с конфликтами со встроенными свойствами объекта ( хотя я не думаю, что здесь большая вероятность конфликта).Например, если вы использовали префикс "cc", все выглядело бы так:
Карта:
var IBANInfo = {
"ccAD": {
countryCode: "AD",
countryName: "Andorra",
length: 24,
bankBranchCode: "0 4n 4n",
accountNum: "0 12 0"
},
"ccBE": {
countryCode: "BE",
countryName: "Belgi\u00EB",
length: 16,
bankBranchCode: "0 3n 0",
accountNum: "0 7n 2n"
},
"ccBA": {
countryCode: "BA",
countryName: "Bosni\u00EB-Herzegovina",
length: 20,
bankBranchCode: "0 3n 3n",
accountNum: "0 8n 2n"
}
};
Поиск:
var countryCode = "AD"; // <= Example for Andorra
var countryInfo = IBANInfo["cc" + countryCode]; // <= Note we add the prefix on lookup
alert("Country name: " + countryInfo.countryName); // <= Alerts "Country name: Andorra"
Если вам нужно (по любой причине ), чтобы пройти через все это, поскольку это не массив, в котором вы не можете использовать числовой индекс. К счастью, именно для этого и предназначен цикл JavaScript for..in
: он просматривает имена (ключи) свойств объекта:
var key;
for (key in IBANInfo) {
if (IBANInfo.hasOwnProperty(key)) {
// ...use key here, it'll be "ccAD" for Andorra, etc...
}
}
(Вы используете hasOwnProperty
, чтобы различать между свойствами, которые объект установил для него напрямую , и теми, которые он получил от своего прототипа. Если вы не знакомы с прототипным наследованием JavaScript, не беспокойтесь слишком сильно, просто обязательно используйте цикл, например
Поскольку массивы JavaScript являются объектами, а все объекты JavaScript являются картами, вы даже можете комбинировать числовое индексирование и индексирование по коду страны. Вот пример этого:
Карта:
// First, build the array
var IBANInfo = [
{
countryCode: "AD",
countryName: "Andorra",
length: 24,
bankBranchCode: "0 4n 4n",
accountNum: "0 12 0"
},
{
countryCode: "BE",
countryName: "Belgi\u00EB",
length: 16,
bankBranchCode: "0 3n 0",
accountNum: "0 7n 2n"
},
{
countryCode: "BA",
countryName: "Bosni\u00EB-Herzegovina",
length: 20,
bankBranchCode: "0 3n 3n",
accountNum: "0 8n 2n"
}
];
// Now, cross-index it
var index, entry;
for (index = 0; index < IBANInfo.length; ++index)
{
// Get the entry at this numeric index
entry = IBANInfo[index];
// Create the country code lookup for it
IBANInfo["cc" + entry.countryCode] = entry;
}
Здесь эти префиксы становятся очень важными, потому что массивы имеют больше свойств, чем простые объекты.
Поиск по коду страны не изменился:
var countryCode = "AD";
var countryInfo = IBANInfo["cc" + countryCode]; // <= Country code lookup
alert("Country name: " + countryInfo.countryName); // <= Alerts "Country name: Andorra"
Но теперь, если (по какой-то причине) вам нужно использовать числовой индекс, вы также можете сделать это:
var countryInfo = IBANInfo[0]; // <= Numeric lookup
alert("Country name: " + countryInfo.countryName); // <= Also alerts "Country name: Andorra"
Перекрестная индексация постфактум, поскольку aboev лучше всего для статических вещей, таких как ваша карта IBAN. Если бы вы собирались добавлять или удалять записи из него как часть своей программы, я бы, вероятно, вместо этого сделал бы из него объект многократного использования.
Если мне нужны данные как численно, так и по ключу, я обычно немного разделяю их, делая аспекты карты свойством массива, а не использую массив напрямую.Для этого требуется лишь небольшое изменение нашего цикла, который создает карту после того, как мы инициализировали массив:
Карта:
// First, build the array
var IBANInfo = [
/* ...same as before, omitted for space... */
];
// Now, cross-index it
var index, entry;
IBANInfo.byCC = {}; // A new plain object to be our map
for (index = 0; index < IBANInfo.length; ++index)
{
// Get the entry at this numeric index
entry = IBANInfo[index];
// Create the country code lookup for it
IBANInfo.byCC["cc" + entry.countryCode] = entry;
}
Поиск кода страны, затем используйте свойство byCC
:
var countryCode = "AD";
var countryInfo = IBANInfo.byCC["cc" + countryCode]; // <= Country code lookup
// The change is here:-^^^^^
alert("Country name: " + countryInfo.countryName); // <= Alerts "Country name: Andorra"
Итак, у вас есть куча вариантов:
byCC
собственность на нем, просто чтобы мы все были в здравом уме Удачного кодирования.
Вы можете использовать массив с ассоциативными массивами.
var variable = {
"countries" : [
{"countryname" : "Andorra",
"country code" : "AD",
"valid IBAN length" : "24",
"Bank/Branch Code (check1, bank, branch)": "0 4n 4n",
"Acount Number (check2, number, check 3)": "0 12 0"
},
{"countryname" : "België",
"country code" : "BE",
"valid IBAN length" : "16",
"Bank/Branch Code (check1, bank, branch)": "0 3n 0 ",
"Acount Number (check2, number, check 3)": "0 7n 2n"
}
]
};
Вы можете проверить формат JSON http://www.json.org/ .
Например, переменная (страны [0] ["название страны"]);
выводит "Андорра".
Вы можете использовать javascript как объекты ...
Для простоты вы можете использовать JSON (простой javascript)
var ibans={countries:[
{"name": "Andorra",
"countryCode" : "ad",
mplahmpla:mplah},
{"name": "België",
"countryCode" : "ad",
mplahmpla:mplah},
{"name": "Other",
"countryCode" : "ad",
mplahmpla:mplah}
]
}
, тогда ibans.countries представляет собой массив со всеми странами ... ibans.countries [1]. имя будет Бельги и т. д.