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

How to check for the existence of dynamic property inside an object?

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() returns 对象的 属性 名称。你可以这样检查,如果一个对象拥有某个 属性:

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

console.log(Object.keys(result).includes("KIDS TEMP"));
console.log(Object.keys(result).includes("CHILDREN TEMP"));

如果要测试,某个属性是否存在,如果存在,包含一个non-empty数组,可以这样测试:

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 它会 return true/false 取决于 属性 是否存在于对象中。

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

console.log(result.hasOwnProperty('KIDS TEMP'),result.hasOwnProperty('CHILDREN TEMP'));