簡體   English   中英

如何在javascript中實現二維數組的原型函數?

[英]How to implement prototype function with 2 dimensional array in javascript?

我需要在javascript中實現c#中的DataTable結構。 例如

function Servers(name)
 {
    this.Name = name;
    this.Columns = new Array(5);

    var rows = new Array(3);

    for (var i=0;i<3;i++)
        rows[i]=new Array(5);

    this.Rows = rows;
 }

我只需輸入這樣的內容即可訪問ith Row的第j個元素;

Servers.Rows[i][j]

這很好用,但我需要這樣調用我的對象;

Servers.Rows[i]["ServerUrl"]

但我不知道如何為這項工作實現原型。 反正有沒有實現這個目標?

注意:Columns數組保存列名,如c#和Columns數組大小始終等於Rows的子數組。

現場演示

 function create2Array(d1, d2, fn) {
    var arr = [],
        d = function(x, y) {},
        f = fn || d;
    for (var i = 0; i < d1; i++) {
        for (var j = 0, curr = []; j < d2; j++) {
             curr[j] = f.call(window, i, j); 
        };
        arr[i] = curr;
    };
    return arr;
};

function createArrayOfObjects(d1) {
    var arr = [];
    for (var i = 0; i < d1; i++) {
        arr[i] = {};
    };
    return arr;
};



function print2DArray(arr) {
    document.body.innerHTML += "<p><b>Array:</b></p>";
    for (var i = 0, len = arr.length; i< len; i++) {
        document.body.innerHTML += "<p><b>" + i + "</b>: " + arr[i].join(" ") + "</p>";
    };
};


function printArrayOfObj(arr) {
    document.body.innerHTML += "<p><b>Array:</b></p>";
    for (var i = 0, len = arr.length; i< len; i++) {
        document.body.innerHTML += "<p><b>" + i + "</b>: " + JSON.stringify(arr[i]) + "</p>";
    };
};

var Server = {};
Server.Rows = createArrayOfObjects(10);
Server.Rows[0]["something"] = "test";
printArrayOfObj(Server.Rows);

像這樣使用它:

Server.rows = create2Array(10, 10);

或者你甚至可以指定一個自定義的init函數,它將索引作為參數。 假設您是否要默認使用0初始化矩陣:

Server.rows = create2Array(10, 10, function(x, y) { return 0;});

或者如果您使用對象。

Server.rows = create2Array(10, 10);
Server.rows[0]["ServerUrl"] = "test";

你應該使用哈希/對象。

如果要在javascript中按名稱/字符串引用數據結構中的變量,則對象是最佳選項。 請參見: https//developer.mozilla.org/en/docs/JavaScript/Guide/Working_with_objects

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM