Javascript 如何遍历对象数组和字符串化
我已经做了一段时间,试图找到一个解决办法。我已经测试了一些堆栈解决方案来迭代嵌套对象,但还没有使其正常工作。我的数据结构如下 我一直在尝试首先遍历嵌套对象,该堆栈似乎与我的类似 然而,当我在for循环中访问geo、value对象以获取其所有属性、ip、主机名、城市等时,我空手而来的是未定义的。下面是我在下面尝试的代码片段 我试图获取整个对象中的所有键和值,并将它们串成一个漂亮的参数字符串,以在ajax请求中发送给服务器Javascript 如何遍历对象数组和字符串化,javascript,jquery,arrays,javascript-objects,Javascript,Jquery,Arrays,Javascript Objects,我已经做了一段时间,试图找到一个解决办法。我已经测试了一些堆栈解决方案来迭代嵌套对象,但还没有使其正常工作。我的数据结构如下 我一直在尝试首先遍历嵌套对象,该堆栈似乎与我的类似 然而,当我在for循环中访问geo、value对象以获取其所有属性、ip、主机名、城市等时,我空手而来的是未定义的。下面是我在下面尝试的代码片段 我试图获取整个对象中的所有键和值,并将它们串成一个漂亮的参数字符串,以在ajax请求中发送给服务器 for (var i = 0; i < myarray.length
for (var i = 0; i < myarray.length; i++) {
var o = myarray[i];
if (o.name === "geo") {
o.value.ip;
}
}
问题在于
geo
对象的结构很奇怪:
name: "geo",value: "{"ip":"111.111.111.111","hostname":"rr.com","city":"MyCity","region":"Ohio","country":"US","loc":"41.34.23","org":"Inc","postal":"1234","timezone":"America/New_York","readme":"https://www.google.com"}"
该值看起来是JSON表示法中的字符串。您必须首先对其进行解析,以便查找其属性:
if (o.name === "geo") {
const nestedObj = JSON.parse(o.value);
console.log(nestedObj.ip);
}
你也可以考虑为你服务的对象,以使该值是一个实际的对象——如果可能的话(它可能不是,但是它会使代码变得更有意义)。
您也可以考虑使用<代码>查找而不是< <代码> > 循环,使代码更短、更优雅:
const json = myarray.find(({ name }) => name === 'geo').value;
const nestedObj = JSON.parse(json);
(如果
geo
对象可能不存在,当然,首先测试未定义的)如果名称为“geo”的对象的值
字段似乎是一个JSON字符串
由于值
是一个字符串,如果不首先将该字符串解析为对象,您将无法直接访问ip
字段:
for (var i = 0; i < myarray.length; i++) {
var o = myarray[i];
if (o.name === "geo") {
/* "Convert" the JSON string in o.value to the corresponding object */
const valueObject = JSON.parse(o.value);
/* The ip field can now be accessed from the valueObject, parsed from
the JSON string in o.value */
console.log(valueObject.ip);
}
}
for(var i=0;i
我空手而来的是未定义的
是否有错误消息,或未定义的值是多少?你能成功地进入if
语句吗?也许可以给我们一个simplify myarray示例,以及你正在寻找的结果是什么for@CertainPerformance我已经得到了if值,但当tri值达到嵌套值时,它在调试器中显示为未定义。@GlenK-抱歉,我想我误解了你的要求。我正在寻找我发布的对象并遍历每个属性,甚至嵌套的属性,然后将其转换为一个字符串,如firstname=john&lastname=smith&ip=111.111.111.11&hostname=rr.com等
for (var i = 0; i < myarray.length; i++) {
var o = myarray[i];
if (o.name === "geo") {
/* "Convert" the JSON string in o.value to the corresponding object */
const valueObject = JSON.parse(o.value);
/* The ip field can now be accessed from the valueObject, parsed from
the JSON string in o.value */
console.log(valueObject.ip);
}
}