javascript - 如何迭代对象数组并字符串化

标签 javascript jquery arrays javascript-objects

我已经花了一些时间试图找到解决方案。我已经测试了一些堆栈解决方案来迭代嵌套对象,但尚未使其正常工作。我的数据结构如下。

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

Iterate through Nested JavaScript Objects

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

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

for (var i = 0; i < myarray.length; i++) {
    var o = myarray[i];
    if (o.name === "geo") {

        o.value.ip;
    }
}
0: {name: "firstname", value: "John"}
1: {name: "lastname", value: "Smith"}
2: {name: "email", value: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6302100707021023040e020a0f4d000c0e" rel="noreferrer noopener nofollow">[email protected]</a>"}
3: {name: "password", value: "asdsdadasads"}
4: {name: "paypal_email", value: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a0c1d3c4d3c1e0c7cdc1c9cc8ec3cfcd" rel="noreferrer noopener nofollow">[email protected]</a>"}
5: {name: "phone", value: "1234567894"}
6: {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"}"
__proto__: Object
length: 7
__proto__: Array(0)

最佳答案

问题是 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);
}

您还可以考虑修复为您提供该对象的任何内容,以便该值是一个实际的对象 - 如果可能的话(可能不可能,但它会让代码更有意义)。

您还可以考虑使用 .find 代替 for 循环,以使代码更短、更优雅:

const json = myarray.find(({ name }) => name === 'geo').value;
const nestedObj = JSON.parse(json);

(如果geo对象可能不存在,当然,首先测试undefined)

关于javascript - 如何迭代对象数组并字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57879723/

相关文章:

javascript - 将 Canvas 分成相同宽度和高度的空间

javascript - NodeJS/Express : Reading header, 之前设置,结果未定义

javascript - Chrome 浏览器在 Handlebars 模板中未捕获类型错误

javascript - 在 fabric js 中绘制外部边界框

javascript - 托管xml文件导致跨域

c - 二维字符数组,像表格一样扫描和打印

c# - 如何使用 JSONPath (或任何其他选项)来查询未命名的 JSON 数组?

java - java中Arrays.fill的复杂性

javascript - 24 Math Game - Javascript 中的随机数生成器和求解器

javascript - 如何根据三个条件设置className?