Javascript:可以动态创建多维数组吗?

Javascript:可以动态创建多维数组吗?,javascript,multidimensional-array,trie,Javascript,Multidimensional Array,Trie,我正在用Javascript处理多维数组。 基本上,我尝试使用多维数组将字符串的字母放入某种Trie(实际上是一个基数树) var data= []; var word="test"; if (l=word[0]) { if (!data[l]) { data[l] = []; } } if (l=word[1]) { if (!data[word[0]][l]) { data[word[0]][l

我正在用Javascript处理多维数组。 基本上,我尝试使用多维数组将字符串的字母放入某种Trie(实际上是一个基数树)

  var data= [];
  var word="test";

  if (l=word[0]) {
      if (!data[l]) {
          data[l] = [];
      }
  }
  if (l=word[1]) {
      if (!data[word[0]][l]) {
          data[word[0]][l] = [];
      }
  }
  if (l=word[2]) {
      if (!data[word[0]][word[1]][l]) {
          data[word[0]][word[1]][l] = [];
      }
  }
  if (l=word[3]) {
      if (!data[word[0]][word[1]][word[2]][l]) {
          data[word[0]][word[1]][word[2]][l] = [];
      }
  }

  console.log(data);
参见小提琴:

我想知道这是否可以自动化(不使用
eval()
)来处理任何长度的单词。我知道Javascript没有指针/引用,这是我可能在PHP中使用的,但有没有其他方法


我不是在寻找trie库,我已经找到了其中的一些库,但我只是想知道是否可以在Javascript中动态执行上述操作。

以下是一个简单的递归版本作为示例。当然,你也可以迭代地做

function trieAdd(trie, word) {
  function addWorker(trie, position) {
    var l = trie[word[position]];
    if (!l)
      trie[word[position]] = l = [];

    if (position < word.length - 1)
      addWorker(l, position + 1);
  }

  addWorker(trie, 0);
  return trie;
}

trieAdd([], "test");
函数trieAdd(trie,word){
函数addWorker(trie,位置){
var l=trie[字[位];
如果(!l)
trie[word[position]=l=[];
如果(位置<字长-1)
添加工人(l,职位+1);
}
addWorker(trie,0);
返回trie;
}
trieAdd([],“测试”);

以下是一个简单的递归版本作为示例。当然,你也可以迭代地做

function trieAdd(trie, word) {
  function addWorker(trie, position) {
    var l = trie[word[position]];
    if (!l)
      trie[word[position]] = l = [];

    if (position < word.length - 1)
      addWorker(l, position + 1);
  }

  addWorker(trie, 0);
  return trie;
}

trieAdd([], "test");
函数trieAdd(trie,word){
函数addWorker(trie,位置){
var l=trie[字[位];
如果(!l)
trie[word[position]=l=[];
如果(位置<字长-1)
添加工人(l,职位+1);
}
addWorker(trie,0);
返回trie;
}
trieAdd([],“测试”);
var-word='tree';
var数据=[];
var obj=数据;
for(变量i=0;i
var-word='tree';
var数据=[];
var obj=数据;
for(变量i=0;i
JavaScript中的一切都是动态的。为什么不可能呢?你没有在你发布的代码中看到
for
循环模式吗?(如果这听起来很苛刻,很抱歉;我不是开玩笑的。)一个离题的技术说明:PHP也没有指针。它有表面上相似的引用,但有一些重要的区别。字符串
测试的预期输出是什么?您生成的格式不正确的数组对我来说似乎很奇怪。为了操作,有一个算法看起来很容易转换为JS。@Dylan您需要两个循环。外层会通过单词,然后在每一层你都必须通过数组。也许做一个递归版本会容易得多。JavaScript中的一切都是动态的。为什么不可能呢?你没有在你发布的代码中看到
for
循环模式吗?(如果这听起来很苛刻,很抱歉;我不是开玩笑的。)一个离题的技术说明:PHP也没有指针。它有表面上相似的引用,但有一些重要的区别。字符串
测试的预期输出是什么?您生成的格式不正确的数组对我来说似乎很奇怪。为了操作,有一个算法看起来很容易转换为JS。@Dylan您需要两个循环。外层会通过单词,然后在每一层你都必须通过数组。可能做递归版本会容易得多。@RainingChain不带它不是。@RainingChain??为什么?“l”怎么了?这是一封好信。“爱”以“l”开头!!“棒棒糖”也是如此。还有“甘草”。还有“lorakeet”。@Pointy你的回答实际上在支持我的回答方面做得很好。@Mathletics哦,谢谢-我在Firebug控制台中修复了它,但忘了在回答中@RainingChain不带,不是吗@RainingChain??为什么?“l”怎么了?这是一封好信。“爱”以“l”开头!!“棒棒糖”也是如此。还有“甘草”。还有“lorakeet”。@Pointy你的回答实际上在支持我的回答方面做得很好。@Mathletics哦,谢谢-我在Firebug控制台中修复了它,但忘了在回答中!我喜欢这个简单,但我不明白。obj永远不会复制回数据,但数据在最后一行中确实包含多维数组。。。这怎么可能呢?实际上,
obj
data
在一开始只是对同一对象的不同引用。它不需要被复制回去
obj
在迭代过程中只是为了指向
data
的子对象而改变。我喜欢这种方法的简单性,但我不理解它。obj永远不会复制回数据,但数据在最后一行中确实包含多维数组。。。这怎么可能呢?实际上,
obj
data
在一开始只是对同一对象的不同引用。它不需要被复制回去
obj
通过迭代进行更改,仅用于指向
数据的子对象。