我需要在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的子数组。
答案 0 :(得分:2)
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";
答案 1 :(得分:0)
你应该使用哈希/对象。
如果要在javascript中按名称/字符串引用数据结构中的变量,则对象是最佳选项。见这里:https://developer.mozilla.org/en/docs/JavaScript/Guide/Working_with_objects