将带有键值字符串的数组转换为对象JavaScript
我正在寻找一些帮助,我正在为一个客户端编写一段代码,该客户端当前已将其分析标签硬编码到页面,并发送所有键值 我们正在使用标签管理系统将其转换为新的分析平台,他们已经能够更新其大多数平台,以创建新的分析平台可以引用的对象,但由于该网站由第三方管理,他们无法在发布前及时解决此问题 我已成功拉取标记并将标记拆分为参数:将带有键值字符串的数组转换为对象JavaScript,javascript,arrays,object,Javascript,Arrays,Object,我正在寻找一些帮助,我正在为一个客户端编写一段代码,该客户端当前已将其分析标签硬编码到页面,并发送所有键值 我们正在使用标签管理系统将其转换为新的分析平台,他们已经能够更新其大多数平台,以创建新的分析平台可以引用的对象,但由于该网站由第三方管理,他们无法在发布前及时解决此问题 我已成功拉取标记并将标记拆分为参数: var x = $('img[alt="MI_TAG"]').attr("src"); x.split("&"); 这将创建阵列: 1:"109=jsp.searchFlig
var x = $('img[alt="MI_TAG"]').attr("src");
x.split("&");
这将创建阵列:
1:"109=jsp.searchFlights.initial"
2:"117=Flight Only Journey"
3:"206=02/11/2017"
4:"208=03/11/2017"
5:"212=ALL"
我要做的是使用这些数组字符串创建一个对象调用“mi”,如下所示:
109:"jsp.searchFlights.initial"
117:"Flight Only Journey"
204:""
205:""
206:"02/11/2017"
208:"03/11/2017"
有人能帮忙吗?
感谢大家的帮助,我已经设法采纳了这里的一些建议,创建了对象并看到它注销:
var x = $('img[alt="MI_TAG"]').attr("src");
var split = x.split("&");
var arrayLength = split.length;
var arr = [];
var i = 0;
do {
arr.push(split[i].replace('=',':'));
arr.toString();
console.log(arr);
i += 1;
} while (i < arrayLength);
let mi = {};
arr.forEach(item=>{
let tempArr = item.split(':');
mi[tempArr[0]] = tempArr[1];
})
console.log(mi);
var x=$('img[alt=“MI_TAG”]”)attr(“src”);
var分割=x分割(&);
var arrayLength=拆分长度;
var-arr=[];
var i=0;
做{
arr.push(拆分[i]。替换('=',':');
arr.toString();
控制台日志(arr);
i+=1;
}而(i<排列长度);
设mi={};
arr.forEach(项目=>{
让tempArr=item.split(':');
mi[tempArr[0]]=tempArr[1];
})
控制台日志(mi);
我现在似乎面临的问题是范围,我希望我的对象是全局可引用的,我如何做到这一点 从数组中,在字符串中的
=
符号上使用reduce
-split,然后创建对象:
let newObject = arr.reduce((obj, item) => {
let parts = item.split("=");
obj[parts[0]] = parts[1];
return obj;
}, {});
假设您至少使用ECMAScript 5.1,您可以使用
Array.prototype.forEach()
在数组上迭代并生成对象
让myArray=[“109=jsp.searchFlights.initial”,“117=flights Only旅程”,“206=02/11/2017”,“208=03/11/2017”,
“212=全部”];
设myObject={};
myArray.forEach(项=>{
让tempArr=item.split('=');
myObject[tempArr[0]]=tempArr[1];
})
console.log(myObject)代码>这只是一个for
循环。为什么要麻烦使用obj
和reduce
?OP我建议您对该拆分设置一个限制,否则如果出现另一个=,数组中的值将超过2个。我的意思是:让newObject={};对于(arr的let项){let parts=item.split(=”);newObject[parts[0]]=parts[1];}
@melpomene-yesp-没有真正的原因。我喜欢在可能的时候使用reduce
。@tymeJV为什么不使用filter
<代码>让obj={};arr.filter(item=>{let parts=item.split(“=”);obj[parts[0]]=parts[1];return obj;})
?204/5来自哪里?像这样将它们添加到输出中似乎是随机的。嗨,安迪,我从另一个页面复制了一个对象来使用插图,如果这让人困惑的话,很抱歉。