微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单个值具有多个键名的 JSON 对象我怎么读?

如何解决单个值具有多个键名的 JSON 对象我怎么读?

我遇到了这样一个带有奇怪键的对象。

const obj = {
formValues: {
'TOTAL;_null_;_null_;3;_null_': "100"
'billing;_null_;_null_;1;_null_': "Y"
'billing;_null_;_null_;2;_null_': "Y"
'billing;_null_;_null_;3;_null_': "Y"
}
}

是否可以通过某种方式解析它,以便仅使用“TOTAL”关键字来获取“100”值?

obj.formValues['TOTAL'] // gives an error

你看到过类似的东西吗?那么,你能解释一下为什么这样做吗? (这不是我想要使用对象的方式,我只是找到了它并试图理解它为什么看起来如此)

解决方法

我遇到了这样一个对象,其中一个字段有多个键名。

对象的一个​​属性只有一个键,JavaScript 对象不可能为同一个属性有多个键。 (可以将一个属性设为另一个属性的别名,但那是不同的。)

在您的评论中:

我正在尝试使用单个键来获取该值,是否可以通过某种方式解析它?就我而言,它是 TOTAL 键。

您可以通过查找实际的属性名称,然后使用括号表示法来获取属性值来实现:

const name = Object.keys(obj.formValues).find(name => name.includes("TOTAL"));
if (name) {
    console.log(obj.formValues[name]); // "100"
}

但是,名称中带有 TOTAL 的属性可能不止一个,在这种情况下,您无法确定会得到哪一个。 (对象属性现在确实有顺序,但是对于对象中具有名称类型的属性,顺序取决于创建属性的顺序,这不是您应该依赖的。)

现场示例:

const obj = {
    formValues: {
        "TOTAL;_null_;_null_;3;_null_": "100","billing;_null_;_null_;1;_null_": "Y","billing;_null_;_null_;2;_null_": "Y","billing;_null_;_null_;3;_null_": "Y"
    }
};
const name = Object.keys(obj.formValues).find(name => name.includes("TOTAL"));
if (name) {
    console.log(obj.formValues[name]); // "100"
}

或者您可以使用 Object.entries 同时获取名称和值(但它涉及创建一堆临时数组 [JavaScript 引擎在这方面做得非常快,尽管如此]):

const obj = {
    formValues: {
        "TOTAL;_null_;_null_;3;_null_": "100","billing;_null_;_null_;3;_null_": "Y"
    }
};
const property = Object.entries(obj.formValues).find(([name]) => name.includes("TOTAL"));
if (property) {
    const [name,value] = property;
    console.log(`Name is ${name},value is ${value}`);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。