0

JavaScriptで無限次元配列を作成(またはシミュレート)しようとしています。基本的に、これはオブジェクトを整数のリスト(任意の長さである可能性があります)に関連付けるデータ構造になります。このデータ構造に各要素を格納する効率的な方法はありますか?

function addElement(theObject, coordinates){
    //object is the object, and coordinates is the list of coordinates (any number of coordinates will be accepted, since it's infinite-dimensional)
}

function getObject(coordinates){
    //get the object that was previously assigned to this list of coordinates
}
addElement("Hello World", [0, 0, 3, 5]);
console.log(getObject([0, 0, 3, 5])); //this would print "Hello World".
4

2 に答える 2

2

できない理由がない限り、座標をインデックスとして使用し、そこに保存します。

var coordinates = [];
var testCoord = [0,0,3,5];
coordinates[testCoord] = "Hello World";
console.log(coordinates[testCoord]);
于 2013-01-01T01:24:18.867 に答える
1

絶対。ループするだけです:

(function() {
  var store = [];
  window.addElement = function(theObject,coordinates) {
    var t = store, l = coordinates.length, i;
    for(i=0; i<l-1; i++) {
      if( typeof t[coordinates[i]] !== "undefined" && !(t[coordinates[i]] instanceof Array))
        (function(old) {(t[coordinates[i]] = []).toString = function() {return old;};})(t[coordinates[i]]);
      t = t[coordinates[i]] = t[coordinates[i]] || [];
    }
    t[coordinates[i]] = theObject;
  }
  window.getObject = function(coordinates) {
    var t = store, l = coordinates.length, i;
    for(i=0; i<l-1; i++) {
      t = t[coordinates[i]];
      if( !(t instanceof Array)) throw new Error("Invalid coordinate");
    }
    return t[coordinates[i]];
  }
})();

addElement("Hello World",[0,0,3,5]);
console.log(getObject([0,0,3,5]));
于 2013-01-01T01:14:02.293 に答える