javascript - 具有单个值的多个键名的 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_;1;_null_": "Y",
"billing;_null_;_null_;2;_null_": "Y",
"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}`);
}
推荐阅读
- linux - Linux 错误:-gt 一元运算符 shell 脚本
- antlr4 - antlr:如何不将单词的前缀作为标记的一部分
- c# - 在c#中读取二进制文件
- javascript - JavaScript Discord Bot 更新频道名称
- python - How to setup different Python interpreters on Sublime Text with SFTP and local?
- java - 在链表中查找节点并返回索引
- powerbi - Power BI 前 N 个底部的结果太多
- python - 如何使用坐标数据从矩阵中找到最大的元素?
- python - Pandas:按索引在多索引数据帧之上添加单个索引数据帧
- javascript - 保持函数的变量和函数本身的区别