我想在JavaScript中分配一个二维数组。
我希望在JavaScript中做类似于这样的事情。
typedef struct
{
int itemA,
int itemB,
string testC
} myStruc;
myStruct MyArray [100];
如何做到这一点?
我想在JavaScript中分配一个二维数组。
我希望在JavaScript中做类似于这样的事情。
typedef struct
{
int itemA,
int itemB,
string testC
} myStruc;
myStruct MyArray [100];
var arr = []
arr[0] = { "itemA": "A", "itemB": "B", "itemC": "C" }
arr[1] = { "itemA": "A", "itemB": "B", "itemC": "C" }
arr[100] = { "itemA": "A", "itemB": "B", "itemC": "C" }
即使我没有对2到99之间的任何元素进行赋值,arr.length也会是101。
同样地,在Javascript中我们通常不预定义像structs这样的对象,因此匿名对象大部分可以实现你想要的效果(或者使用Ken示例中的文档化工厂函数)。
"new Array()"并不必要,简洁的"var a = [];"语法更快。:)
JS way
function myStruct( a , b , c )
@param {int} a
@param {int} b
@param {string} c
@return {object}
*/
function myStruct(){
// 参数
var a = arguments[0] , b = arguments[1] , c = arguments[2];
// 检查参数a是否为整数类型
if( typeof a == "number" && (a + "").indexOf('.') == -1 ){ this['itemA'] = a; }
// 检查参数b是否为整数类型
if( typeof b == "number" && (b + "").indexOf('.') == -1 ){ this['itemB'] = b; }
// 检查参数c是否为字符串类型
if( typeof c == "string" /*检查字符串长度?!*/){ this['testC'] = c; }
}
// myStruct原型
myStruct.prototype = {
// 构造函数
'constructor' : myStruct,
// itemA的默认值
'itemA' : 0,
// itemB的默认值
'itemB' : 0,
// testC的默认值
'testC' : ''
};
/*
静态函数defaultLength([, length])
设置/获取defaultLength值。
@param {unsigned int|void} length
@return {void|unsigned int}
*/
myStruct.defaultLength = function(){
// 返回默认值
if( arguments.length == 0 ){
return myStruct._default;
}else{
// 设置默认值
var l = arguments[0];
myStruct._default = ( typeof l == "number" && (l + "").indexOf('.') == -1 ) ? Math.abs( l ) : 0;
}
};
// @var {unsigned int} myStruct._default = 0
myStruct._default = 0;
/*
静态函数makeArray( length )
@param {unsigned int} length 数组的长度
@return {array}
*/
myStruct.makeArray = function( length ){
// 检查length是否为无符号整数
length = ( typeof length == "number" && (length + "").indexOf('.') == -1 ) ? Math.abs( length ) : myStruct.defaultLength();
// 本地数组
var array = [] , i = 0;
// 填充数组
for( ; i < length; i++){
array[ i ] = new myStruct();
}
// 返回
return array;
};
// 制造它!
myStruct.defaultLength(10); // 设置默认长度== 10
var arr = myStruct.makeArray(); // [myStruct, myStruct, myStruct, myStruct, myStruct, myStruct, myStruct, myStruct, myStruct, myStruct]
arr.length; // 10
Object.prototype.toString.call( arr ); // [object Array]
/* 另一个例子 */
var arr2 = []; // 制造一个空数组
arr2[0] = new myStruct(1,1,'test1'); // 制造第一个myStruct对象
arr2[1] = new myStruct(2,2,'test2'); // 制造第二个myStruct对象
听起来你想要一个对象数组的属性,但是我可能误解了。
你可能只需要像这样的东西...
function Person(first, last) {
this.first = first;
this.last = last;
}
var person = new Person("John", "Dough");
http://www.kevlindev.com/tutorials/javascript/inheritance/index.htm
function Sample(value1, value2) {
this.value1 = value1;
this.value2 = value2;
}
var test = new Array();
test[0] = new Sample("a","aa");
test[1] = new Sample("b","bb");
PS:在 JavaScript 中,有多种方法可以实现这一点。
arr = [];
for (i=0; i<100; i++) {
arr[i] = {itemA: <value>, itemB: <value>, textC: <string>, ... };
}
在Javascript中创建数组有几种方法,最接近你想要做的方法应该是:
var myArray = new Array("someString1", "someString2", "someString3", ...);
您可以将"someString1"
替换为实际对象。
您还可以使用Array构造函数来设置初始长度:
var myArray = new Array(5);
myArray[0] = ...;
myArray[1] = ...;