js遍历键值对

               var json = eval('(' + pat + ')');
                for(var i=0,l=json.length;i<l;i++){
                    for(var key in json[i]){
                       alert(key+':'+json[i][key]);
                        
                     }
                  }    

### 遍历字典的键值对 在 QML 中,可以通过 JavaScript 的方式遍历字典(即 JavaScript 对象)。QML 中的字典本质上是 JavaScript 对象,因此可以使用 `for...in` 循环遍历键值对。以下是一个示例: ```qml Item { width: 200 height: 200 Text { id: textOutput anchors.centerIn: parent text: "Dictionary: " + JSON.stringify(myDict) } MouseArea { anchors.fill: parent onClicked: { var myDict = { "name": "Alice", "age": 30, "occupation": "Engineer" }; for (var key in myDict) { if (myDict.hasOwnProperty(key)) { console.log("Key: " + key + ", Value: " + myDict[key]); } } } } } ``` 在上述代码中,`for...in` 循环用于遍历字典中的每个键,然后通过 `hasOwnProperty` 方法确保该键是对象自身的属性而非继承的属性。这种方式可以有效地访问字典中的每个键值对。 ### 使用 QMap 传递键值对遍历 如果需要从 C++ 传递键值对到 QML,可以使用 `QMap` 类型。QML 将 `QMap` 视为 JavaScript 的字典,并可以使用相同的方式进行遍历。以下是一个示例: C++ 代码中定义: ```cpp class MyCppObject : public QObject { Q_OBJECT public: Q_INVOKABLE QMap<QString, QVariant> getDictionary() { QMap<QString, QVariant> data; data["name"] = "Alice"; data["age"] = 30; data["occupation"] = "Engineer"; return data; } }; ``` QML 中调用并遍历: ```qml Item { width: 200 height: 200 Text { id: textOutput anchors.centerIn: parent text: "Dictionary: " + JSON.stringify(dictData) } MouseArea { anchors.fill: parent onClicked: { var dictData = cppObject.getDictionary(); for (var key in dictData) { if (dictData.hasOwnProperty(key)) { console.log("Key: " + key + ", Value: " + dictData[key]); } } } } } ``` 在 QML 中,通过 `cppObject.getDictionary()` 获取 `QMap` 数据,并使用 `for...in` 循环遍历键值对。这种方式适用于需要从 C++ 后端传递键值对到 QML 的场景。 ### 使用 JSON 文件传递字典数据并遍历 QML 也可以通过读取 JSON 文件来获取字典数据,并进行遍历。以下是一个示例: 假设有一个 `data.json` 文件,内容如下: ```json { "name": "Alice", "age": 30, "occupation": "Engineer" } ``` QML 中读取并遍历: ```qml Item { width: 200 height: 200 Text { id: textOutput anchors.centerIn: parent text: "Dictionary: " + JSON.stringify(dictData) } MouseArea { anchors.fill: parent onClicked: { var file = new XMLHttpRequest(); file.open("GET", "data.json", false); file.send(null); var dictData = JSON.parse(file.responseText); for (var key in dictData) { if (dictData.hasOwnProperty(key)) { console.log("Key: " + key + ", Value: " + dictData[key]); } } } } } ``` 在上述代码中,通过 `XMLHttpRequest` 读取 JSON 文件,并将其解析为 JavaScript 对象。然后使用 `for...in` 循环遍历键值对。 ### 使用 ListModel 存储有序字典并遍历 如果需要在 QML 中保持字典的顺序,可以使用 `ListModel` 存储键值对对象,并通过索引进行遍历: ```qml Item { width: 200 height: 200 ListModel { id: myModel ListElement { key: "name" value: "Alice" } ListElement { key: "age" value: 30 } ListElement { key: "occupation" value: "Engineer" } } MouseArea { anchors.fill: parent onClicked: { for (var i = 0; i < myModel.count; i++) { var item = myModel.get(i); console.log("Key: " + item.key + ", Value: " + item.value); } } } } ``` 在上述代码中,`ListModel` 用于存储键值对对象,并通过 `count` 和 `get(i)` 方法按顺序访问每个键值对。这种方法适用于需要保持字典顺序的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值