gpt4 book ai didi

javascript - 将数组值(vcard 参数)排序为变量

转载 作者:行者123 更新时间:2023-12-03 10:23:17 27 4
gpt4 key购买 nike

我有以下问题:

(接下来的一切,都需要用JS来解决)

我有一个数组,其中包含 vcard 的参数,并且定义了一些变量。我想要达到的是将参数或数组的参数带入变量中。所以我有一个看起来像这样的数组:

array[0] --> BEGIN:VCARD  
array[1] --> VERSION: 3.0
array[2] --> FN: John Doe
array[3] --> url: www.google.de
array[4] --> title: ceo

等等。现在的问题是,属性可以有两种(或更多版本和种类),例如。工作电话可以类似于:TEL;WORK;VOICETEL;WORK;或 TEL,或 TEL;TYPE=voice,workTEL; TYPE=voice,work,prefTEL TYPE=work, CHARSET=UTF-8 或更多可能性。另一个问题是,(取决于 vcard 信息)参数以另一种方式排序,所以有时 url 在末尾,有时在中间,有时在开头,与其他的相同。

我现在拥有的另一件事是变量,定义为:var Accname、街道、城市、邮政编码、国家/地区、名字、姓氏、职务、邮件、电话号码;

有人知道如何解决这个问题吗?

我想到的唯一一件事是询问数组中的每个元素是否存在(因为我不知道其中有多少元素),然后询问从 0 到长度的 for 循环数量尽可能多数组作为数组中的元素并检查每个 for 循环 if(array[2]==FN){//将值保存到变量},与其他参数相同。但这里的第一个问题是我会有很多令人困惑的不清楚的代码,另一个问题是:我只需要变量中的值,有时我什至必须拆分它们,所以我例如有变量 FirstName 和 LastName 但我什么数组中保存的是 FN: John Doe,我需要的是将 FirstName 设置为 John,将 LastName 设置为 Doe。

有人知道一个紧凑、清晰且可维护的解决方案吗?

感谢您的帮助!

编辑:

我现在尝试的(Mathieu 的解决方案)如下:

var aliases =
{
'/FN/i':'name',
'/TITLE/i':'jobtitle',
'/ORG/i':'accname',
'/EMAIL;WORK;INTERNET/i':'mail',
'/EMAIL;TYPE=INTERNET/i':'mail',
'/EMAIL;INTERNET/i':'mail',
'/EMAIL/i':'mail',
'/TEL;WORK;VOICE/i':'phone',
'/TEL;TYPE=voice,work,pref/i':'phone',
'/TEL;TYPE=voice,work/i':'phone',
'/TEL;WORK/i':'phone',
'/TEL:TYPE=work/i':'phone',
'/TEL;CELL/i':'mobile',
'/TEL;TYPE=voice,cell,pref/i':'mobile',
'/TEL;TYPE=voice,cell/i':'mobile',
'/TEL;TYPE=cell/i':'mobile',
'/ADDR/i':'address'
};

var idx;
var out={}, i, ci = fields.length;
for(i=0;i<ci;i++) // 1
for(idx in aliases) // 2
if(aliases.hasOwnProperty(idx)) // 3
if(fields[i].search(eval(idx)) >= 0) // 4
out[aliases[idx]] = fields[i].substring(fields[i].indexOf(':')+1); // 5

//document.write(JSON.stringify(out));

alert(out['accname']);

但是我在alert中得到的是二维码的完整内容...有什么想法吗?

编辑2:现在工作,在恢复我的阵列时出现了一个小错误。谢谢。

最佳答案

我认为这样的事情可以解决问题。

<script>
var vcard = ['BEGIN:VCARD','VERSION: 3.0','FN: John Doe','url: www.google.de', 'TEL TYPE=work, CHARSET=UTF-8: 0123466','title: ceo' ];

// Define here filters for the fields you want
var aliases =
{
'/tel/i':'Tel',
'/work/i':'Tel',
'/FN/i':'Name',
};

var out={}, i, ci = vcard.length;
for(i=0;i<ci;i++) // 1
for(idx in aliases) // 2
if(aliases.hasOwnProperty(idx)) // 3
if(vcard[i].search(eval(idx)) >= 0) // 4
out[aliases[idx]] = vcard[i].substring(vcard[i].indexOf(':')+1); // 5

document.write(JSON.stringify(out));

</script>

关于javascript - 将数组值(vcard 参数)排序为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29533325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com