在JS中使用任意长数组作为对象键(用于多级对象)设置对象值

时间:2018-08-16 18:35:52

标签: javascript object multi-level

我正在尝试解决我正在使用的Node API的问题,但我陷入了一些本来应该很容易的事情,但我只是想不通。假设我有一个像这样的数组:

[1, 2, 1, ....]

此数组可以任意长。我需要将数组中的值用作对象的键,因此对于上面的示例,无论数组有多长,我都必须能够执行类似anotherObject[1][2][1] = 'hello world'的操作。

我已经想出了如何使用while循环或递归函数来获取对象的值,但是我不知道该如何设置值。

(以防万一有人想出一种方法来避免这个问题,并以不同的方式做我想做的事情,我将简要总结一下我的工作。

想象一下像Twitter这样的社交网络,您可以在其中撰写帖子作为对其他帖子的回复。然后,某人可以回复您的帖子,依此类推,这样就可以有大量的帖子,每个帖子都对之前的帖子进行回复。但是,也可能有一堆相同级别的回复-所有回复都回复同一帖子,但彼此不回复。我将其存储在数据库中的方式非常简单:如果帖子是回复,则它具有引用要回复的帖子的ID的属性。如果您想出一种更好的存储方式,我很想听听。

现在是问题所在。您如何显示对某个帖子的所有回复,以及对这些回复的所有回复以及对这些回复的所有回复,等等?我想出了一个伪算法,该伪算法创建类似于DOM的东西,该DOM由带有孩子和兄弟姐妹等的注释组成。我只需要一种在它周围导航和修改它的方法。因此,从逻辑上讲,我需要一种跟踪什么是东西的方法以及一种修改单个元素的方法。因此,我让数组跟踪当前正在处理的算法,然后跟踪跟踪发现了哪些帖子以及已经处理了哪些帖子的对象。如果有更好的方法来解决此问题,我很乐意听到)

1 个答案:

答案 0 :(得分:0)

我写了一个小片段

var obj = [];
var arr = [1,2,3];
var set = 11; // value we want to set to
var test = obj;

for(var k =0 ;k < arr.length; k++) {
    var i = arr[k];
    if(!test[i]) {
        if(k == arr.length-1){
            test[i] = set; }
         else{      
            test[i] = []
         }
    }
    test = test[i]
}

console.log(obj[1][2][3])

您可以将其包装在用例的函数中