1

Javascriptで多次元配列をいじっています。基本的に、多次元配列を使用して、文字列の文字をある種のトライ (実際には基数ツリー) に入れようとしています。

  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);

フィドルを参照してください: http://jsfiddle.net/TN28c/

eval()任意の長さの単語を処理するために、これを (を使用せずに) 自動化できるかどうか疑問に思っていました。Javascriptにはポインター/参照がないことは知っていますが、これはおそらくPHPで使用するものですが、別の方法はありますか?

私は trie-library を探しているわけではありません。すでにこれらのいくつかを見つけましたが、上記が Javascript で動的に実行できるかどうか疑問に思っていました。

4

2 に答える 2

1
var word= 'tree';
var data = [];
var obj = data;
for (var i = 0; i < word.length; i++) {
    if (!obj[word[i]]) {
        obj[word[i]] = []
    }
    obj = obj[word[i]];
}
console.log(data);
于 2013-11-14T01:17:13.253 に答える
0

例として、単純な再帰バージョンを次に示します。もちろん、繰り返し行うこともできます。

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");
于 2013-11-14T01:16:16.240 に答える