QML/Javascript:将自引用属性添加到匹配某些标识符的嵌套 var 内的子数组

QML/Javascript: Adding Self-Referencing Attribute to Subarrays Inside Nested var Matching Some Identifier

我想通过一个名为 "data" 的嵌套 varlist 进行递归,它作为 var 存储在 QML 中。它包含一个名为 "delegates": [ { ... }, ... , { ... } ] 的属性,它为某些委托声明了一些属性。如果这些属性子列表之一包含属性“"data" 我有另一个子级别可以通过该特定委托的操作遍历到。

我想做的是创建一个函数以递归地附加到我的 varlist("data" 子级别),只要检测到与该名称匹配的子级别("data" ) 被检测到。例如,如果 data.delegates[0].data 存在,我想在其后附加相当于 data.delegates[0].data.parentPointer: data 的内容;如果 data.delegates[0].data.delegates[0].data 存在,我想附加 data.delegates[0].data.delegates[0].data.parentPointer: data.delegates[0].data 等价物......

我不是特别关心(计算)成本,因为这是 pragma SingletonComponent.onCompleted 中的一次性事件,嵌套最多只有几层。

这更像是一个 Javascript 问题,我相信,因为我相信自动创建自引用指针的方法是通过某种递归 function 调用(这是根据 QML Javascript 中的定义)。我知道如何在 QML 中对 Javascript 中的简单 var 集进行追加操作:

function appendStuff(myVar) {
   var temp = myVar
   temp.push("stuff")
   myVar = temp
}

我知道我可以有条件地签入 Javascript 命名属性 w/in 一个 var 比如:

if (typeof currentLevel.data !== "undefined") {
  //do stuff....
}

但是,我有点挂在递归方面——如何重建多级数组——同时正确地跟踪我在原始数组中的位置,直到我的编辑版本完成。我还意识到,当涉及到 "parentPointer" 时,我可能需要我的编辑版本引用自身,这有点棘手。

有什么想法吗?

要将新字段分配给 JS 对象,您只需使用 myjsobject['newprop'] = value.

所以一个简单的递归函数来创建例如一个双向链表,应该是这样的:

import QtQuick 2.0
import QtQuick.Controls 1.4

ApplicationWindow {
    id: root
    visible: true
    width: 400; height: 450

    function foo(depth, ref) {
        var a = { value: depth }
        if (depth !== 0) {
            a['next'] = foo(depth - 1, a)
        }
        if (ref) a['pred'] = ref
        return a
    }

    property var test: foo(10)

    Component.onCompleted: console.log(test.value, test.next.value, test.next.pred.value)
}