这里我有两个变量:
var id = '3, 5 ,16,'; //n number if elements
var naziv = 'fieldY, fieldX, fieldQ,'; //same number of strings like number of id
我需要在 select2 插件中使用这个变量,所以我需要从这个数据创建一个数组,如下所示:
[{id: "3", title: "fieldY"},{id: "5", title: "fieldX"},{id: "16", title: "fieldQ"}] ...
然后我可以使用这个变量 id,naziv 到 select2 函数中:
$("#e6").select2("data", [{id: "3", title: "fieldY"},{id: "5", title: "fieldX"},{id: "16", title: "fieldQ"}]);
那么如何将 id, naziv
转换成我需要的格式呢?
更新:id,naziv 必须没有引号,所以没有“id”只是 id...这就是问题所在
最佳答案
我假设 id 字段有一个类型并且应该是 var id = '3, 5, 16,'
。
我们可以使用 .split(', ')
将字符串转换为数组,但我们需要删除末尾的逗号。我们可以使用 .substr(0, [strvariable].length - 1)
如果我们知道它总是有一个尾随逗号,或者我们可以简单地检查 [strvariable]。 lastIndexOf(',') == ([strvariable].length - 1) ? [strvariable].substr(0, [strvariable].length - 1) : [strvariable]
。
该段的最终代码将像这样结束。
var idArr = (id.lastIndexOf(',') == (id.length - 1) ? id.substr(0, id.length - 1) : id).split(', ');
var nazivArr = (naziv.lastIndexOf(',') == (naziv.length - 1) ? naziv.substr(0, naziv.length - 1) : naziv).split(', ');
所以,现在我们有两个关联数组,我们只需要遍历它们来创建我们的对象。我们将创建一个数组来保存我们的对象并将所有对象都放入其中。
var objHold = [];
for(var i=0,length=idArr.length;i<length;i++)
{
if(idArr[i] && nazivArr[i]) // make sure both arrays have a value
objHold.push({id: idArr[i], title: nazivArr[i]});
}
现在您可以调用 $("#e6").select2("data", objHold);
最终代码
var id = '3, 5, 16,'; //n number if elements
var naziv = 'fieldY, fieldX, fieldQ,'; //same number of strings like number of id
var idArr = (id.lastIndexOf(',') == (id.length - 1) ? id.substr(0, id.length - 1) : id).split(', ');
var nazivArr = (naziv.lastIndexOf(',') == (naziv.length - 1) ? naziv.substr(0, naziv.length - 1) : naziv).split(', ');
var objHold = [];
for(var i=0,length=idArr.length;i<length;i++)
{
if(idArr[i] && nazivArr[i]) // make sure both arrays have a value
objHold.push({id: idArr[i], title: nazivArr[i]});
}
$("#e6").select2("data", objHold);
关于javascript - 用json解析字符串数据并在函数中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511260/