我有一个包含所有可用国家代码的对象。我想知道如何通过给定的电话号码获取国家代码并显示相应的国家名称。电话号码看起来像16041234567(加拿大/美国+1)或8601012345678(中国+86)或任何其他没有加号(+)的国家电话号码。我只想获取国家代码,然后我就知道如何显示名称了。代码似乎可以是1到4位数字。
我有一个包含所有可用国家代码的对象。我想知道如何通过给定的电话号码获取国家代码并显示相应的国家名称。电话号码看起来像16041234567(加拿大/美国+1)或8601012345678(中国+86)或任何其他没有加号(+)的国家电话号码。我只想获取国家代码,然后我就知道如何显示名称了。代码似乎可以是1到4位数字。
第一回答:
只是一个快速的想法,为什么不从另一端开始数。
从号码的末尾减去最后10个数字。你剩下的就是缩短的国家代码。 以你的例子为例:
num = "16041234567";
code = num.slice(0, num.length-10);
country_name = country_code_object[code];
这段代码假设你的对象可以处理可变长度的代码(但你可以随时缓冲代码前面的部分)。
修正:中国不使用10个数字(手机使用11个数字)
修复: 经过对国际区号的更全面了解,我意识到它们是一个前缀树。这意味着你只需要一遍遍地逐个字符地检查,就可以在线性时间内完成。
num = "16041234567";
country_code;
i = 1;
while (!country_code || i < num.length) {
country_code = country_code_obj[num.slice(0, i)];
i++;
}
国家代码的本质保证了第一个有效的代码就是正确的。(我们可以想象这一点是真实的,电话公司不知道你何时输入完毕。他们只知道你已经输入完整个有效的国家代码)