Javascript 如何遍历对象数组和字符串化

Javascript 如何遍历对象数组和字符串化,javascript,jquery,arrays,javascript-objects,Javascript,Jquery,Arrays,Javascript Objects,我已经做了一段时间,试图找到一个解决办法。我已经测试了一些堆栈解决方案来迭代嵌套对象,但还没有使其正常工作。我的数据结构如下 我一直在尝试首先遍历嵌套对象,该堆栈似乎与我的类似 然而,当我在for循环中访问geo、value对象以获取其所有属性、ip、主机名、城市等时,我空手而来的是未定义的。下面是我在下面尝试的代码片段 我试图获取整个对象中的所有键和值,并将它们串成一个漂亮的参数字符串,以在ajax请求中发送给服务器 for (var i = 0; i < myarray.length

我已经做了一段时间,试图找到一个解决办法。我已经测试了一些堆栈解决方案来迭代嵌套对象,但还没有使其正常工作。我的数据结构如下

我一直在尝试首先遍历嵌套对象,该堆栈似乎与我的类似

然而,当我在for循环中访问geo、value对象以获取其所有属性、ip、主机名、城市等时,我空手而来的是未定义的。下面是我在下面尝试的代码片段

我试图获取整个对象中的所有键和值,并将它们串成一个漂亮的参数字符串,以在ajax请求中发送给服务器

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);
    }
}