如何检查对象内部是否存在动态属性


const result = {
"MEN": [],
"WOMEN": [],
"KIDS TEMP": [
"BCDEFHJJJJJJ34EEE234",
"ABCDEFGHIJKL12345678"
]
}
const result = {
"MEN": [],
"WOMEN": [],
"CHILDREN TEMP": [
"BCDEFHJJJJJJ34EEE234",
"ABCDEFGHIJKL12345678"
]
}

我有一个像上面一样的对象result。有时,它可能具有KIDS TEMP性质,有时具有CHILDREN TEMP性质。由于这个属性有空格,所以我不能使用点运算符来获取这些属性。如果存在KIDS TEMPCHILDREN TEMP,我想创建一个标志。我尝试了以下内容:-

const part = 'KIDS TEMP' || 'CHILDREN TEMP';
let check;
if (result) {
check = !!(result?.MEN.length !== 0 || result[part].length !== 0);
}

但当我收到CHILDREN TEMP说它不能读取未定义的长度时,上面的代码就坏了。我该如何解决这个问题?

Object.keys()返回对象的属性名称。你可以这样检查,如果一个对象拥有某个属性:

const result = {
"MEN": [],
"WOMEN": [],
"KIDS TEMP": [
"BCDEFHJJJJJJ34EEE234",
"ABCDEFGHIJKL12345678"
]
}
console.log(Object.keys(result).includes("KIDS TEMP"));
console.log(Object.keys(result).includes("CHILDREN TEMP"));

如果你想测试,如果某个属性存在,并且如果它存在,包含一个非空数组,你可以这样测试它:

const result = {
"MEN": [],
"WOMEN": [],
"KIDS TEMP": [
"BCDEFHJJJJJJ34EEE234",
"ABCDEFGHIJKL12345678"
]
}
console.log(result["KIDS TEMP"]?.length > 0);
console.log(result["CHILDREN TEMP"]?.length > 0);

代码的主要问题是const part = string1 || string2总是计算为string1,这不是您想要做的

您可以使用Object的方法hasOwnProperty,它将返回true/false,这取决于该属性是否存在于对象中。

const result = {
"MEN": [],
"WOMEN": [],
"KIDS TEMP": [
"BCDEFHJJJJJJ34EEE234",
"ABCDEFGHIJKL12345678"
]
}
console.log(result.hasOwnProperty('KIDS TEMP'),result.hasOwnProperty('CHILDREN TEMP'));

最新更新