Javascript 2D数组分配

时间:2008-10-06 19:13:37

标签: javascript

我想在Java Script中分配一个2 D数组。

我想在JavaScript中做一些与此相似的事情

typedef struct
{
   int  itemA,
   int  itemB,
   string testC
} myStruc;

myStruct MyArray [100];

怎么做?

6 个答案:

答案 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中的数组实际上非常松散 - 在访问通常超出数组范围的元素之前,甚至不需要定义长度。

看看the Mozilla documentation on Arrays