javascript - 如何检查 JSON 对象参数是否存在?

标签 javascript qt qml

我有一个对象的 ListModel,它可能有也可能没有 myvis 参数(用于可见性)。如果 myvis === true,ListView 委托(delegate)应该是可见的。如果未定义 myvis,我想假设 myvis === true

为了检查 myvis 是否已定义和/或存在,我尝试了 3 种方法:

  • return (typeof myvis) === 'undefined' ?真:myvis
  • 返回 myvis === null ?真:myvis
  • 返回 hasOwnProperty("myvis") ? myvis : true

这些都没有成功;看下面的代码输出

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480

    ListModel {
        id: myjson
        ListElement {
            displayName: "Planes"
            myvis: false
        }
        ListElement {
            displayName: "Trains"
            myvis: true
        }
        ListElement {
            displayName: "Automobiles"
        }
    }


    ListView {
        model: myjson
        anchors.fill: parent

        delegate: Text {
            text: displayName
            visible: {
                console.log("typeof " + displayName + ":myvis is " + (typeof myvis))
                console.log("hasOwnProperty " + hasOwnProperty("myvis"))
                console.log(displayName + " is " + myvis)

                //if myvis is not defined, assume it to be TRUE
                return (hasOwnProperty("myvis") ? myvis : true)
            }
        }
    }
}

我得到的输出:

qml: typeof Planes:myvis is boolean
qml: hasOwnProperty false
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty false
qml: Trains is true
qml: typeof Automobiles:myvis is boolean
qml: hasOwnProperty false
qml: Automobiles is false

我期望的输出:

qml: typeof Planes:myvis is boolean
qml: hasOwnProperty true
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty true
qml: Trains is true
qml: typeof Automobiles:myvis is undefined
qml: hasOwnProperty false
qml: Automobiles is undefined

编辑 如果模型是 JSON 对象和非 QML,那么它可以工作:

    property var myjson: [
        {
            displayName: "planes",
            myvis: false
        },
        {
            displayName: "trains",
            myvis: true
        },
        {
            displayName: "automobiles"
        }
    ]

    ListView {
        model: myjson
        anchors.fill: parent

        delegate: Text {
            text: modelData.displayName
            visible: {
                console.log("typeof " + modelData.displayName + ":myvis is " + (typeof modelData.myvis))
                console.log("hasOwnProperty " + modelData.hasOwnProperty("myvis"))
                console.log(modelData.displayName + " is " + modelData.myvis)

                //if myvis is not defined, assume it to be TRUE
                return (modelData.hasOwnProperty("myvis") ? modelData.myvis : true)
            }
        }
    }

输出完全符合预期。有没有办法在保留 ListModel 和 ListElements 的同时获得此输出?

最佳答案

如果你只是设置 myvis !== false 会发生什么我想这就是你要找的。如果它不等于假,你只需要展示你的东西。

关于javascript - 如何检查 JSON 对象参数是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416506/

相关文章:

javascript - 如何在 React JS 中有条件地应用 CSS 类

Qt高分辨率定时器

c++ - 用于 2D/3D 游戏开发的 Qt 库

performance - 文本区域记录速度慢

qt - 没有小部件的系统托盘图标

javascript - 我可以用透明渐变 javascript Canvas 填充矩形吗?

javascript - 无法在 JavaScript 中单击时更改元素

javascript - 如何检查用户是否已经登录facebook?

c++ - 显示QImage的方式

c++ - 如何使用十六进制格式更改容器的背景颜色?