我想在Java Script中分配一个2 D数组。
我想在JavaScript中做一些与此相似的事情
typedef struct
{
int itemA,
int itemB,
string testC
} myStruc;
myStruct MyArray [100];
怎么做?
答案 0 :(得分:6)
var arr = []
arr[0] = { "itemA": "A", "itemB": "B", "itemC": "C" }
arr[1] = { "itemA": "A", "itemB": "B", "itemC": "C" }
我认为您正在尝试将静态语言结构应用于动态且不同的Javascript世界。在很多语言的意义上,Javascript并没有真正的数组概念。
在Javascript中,数组是一种特殊的对象(本身只是一个哈希),它具有特殊的长度属性。您在上面看到的整数“索引”(即arr [0]中的0)只是具有查找。特殊长度属性定义为大于最大整数键的一个。在我上面的例子中,arr.length是2.但如果我要分配:
arr[100] = { "itemA": "A", "itemB": "B", "itemC": "C" }
然后arr.length将是101,即使我没有做任何事情来分配2到99之间的任何元素。
类似地,我们通常不会在Javascript中预定义像结构体这样的对象,因此匿名对象将在很大程度上实现您想要的(或使用文档化的工厂函数,例如Ken中的示例)。
“new Array()”不是必需的,因为简洁的“var a = [];”语法更快。 :)
答案 1 :(得分:3)
如果我理解你需要动态创建一个用你自己的struct填充的指定长度的数组。
在js中,struct是[object object],如
// typedef struct { type prop1 , ... , type propN } myStructName; function myStructName(){} myStructName.prototype = { 'constructor' : myStructname, 'prop1' : defaultVal1, // ... 'propN' : defaultValN };
我们可以创建一个dinamycally创建结构类型但不是这种情况的函数。 现在我们只需要创建一个函数来创建一个特定长度的数组,该数组填充了所有myStruct对象实例。 这是我的方式
/* Copyrights (c) 2011 - Matteo Giordani < matteo.giordani90@gmail.com > MIT-Style License typedef struct{ int itemA , int itemB , string testC } myStruct myStruct arr[10];JS way function myStruct( a , b , c ) @param {int} a @param {int} b @param {string} c @return {object}
*/ function myStruct(){
// arguments var a = arguments[0] , b = arguments[1] , c = arguments[2]; // check INT type for argument a if( typeof a == "number" && (a + "").indexOf('.') == -1 ){ this['itemA'] = a; } // check INT type for argument b if( typeof b == "number" && (b + "").indexOf('.') == -1 ){ this['itemB'] = b; } // check INT type for argument b if( typeof c == "string" /*check for string length?!*/){ this['testC'] = c; } } // myStruct prototype myStruct.prototype = { // constructor 'constructor' : myStruct, // default value for itemA 'itemA' : 0, // default value for itemB 'itemB' : 0, // default value for testC 'testC' : '' }; /* static function defaultLength([, length]) Set/Get the defaultLength value. @param {unsigned int|void} length @return {void|unsigned int} */ myStruct.defaultLength = function(){ // return the default value if( arguments.length == 0 ){ return myStruct._default; }else{ // set the default value 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; /* static function makeArray( length ) @param {unsigned int} length the length of the array @return {array} */ myStruct.makeArray = function( length ){ // Check if length is unsigned int length = ( typeof length == "number" && (length + "").indexOf('.') == -1 ) ? Math.abs( length ) : myStruct.defaultLength(); // local array var array = [] , i = 0; // populate the array for( ; i < length; i++){ array[ i ] = new myStruct(); } // return return array; }; // MAKE IT! myStruct.defaultLength(10); // set the default length == 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] /* ANOTHER EXAMPLE */ var arr2 = []; // make an empty array arr2[0] = new myStruct(1,1,'test1'); // make a first myStruct object arr2[1] = new myStruct(2,2,'test2'); // make a second myStruct object
答案 2 :(得分:1)
听起来你想要一个对象数组的属性,但我可能会误解。
你可能只需要......
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
答案 3 :(得分:1)
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:在Java Script中有几种方法可以实现这一点。
答案 4 :(得分:1)
如果您真的想分配特定结构的100个元素数组,您可以执行以下操作:
arr = [];
for (i=0; i<100; i++) {
arr[i] = {itemA: <value>, itemB: <value>, textC: <string>, ... };
}
答案 5 :(得分:0)
有几种方法可以在Javascript中创建数组,最接近你想做的方法应该是:
var myArray = new Array("someString1", "someString2", "someString3", ...);
您可以将"someString1"
替换为实际对象。
您还可以使用Array构造函数设置初始长度:
var myArray = new Array(5);
myArray[0] = ...;
myArray[1] = ...;
Javascript中的数组实际上非常松散 - 在访问通常超出数组范围的元素之前,甚至不需要定义长度。