0

我对 JS 很陌生,之前一直在 C/C++ 中工作,我需要 JSON 中的以下 C 结构等价物

struct tmp_t{
int a;
char c_str[1024];
};

struct tmp2_t{
int a2;
.
.
char c2_str[1024];
};

struct my {
int number;
struct tmp_t tmp[100];
struct tmp2_t tmp2[100][1000];
};

对于像

var myJSON = {
"number":0,
.
.
};

我需要像访问它一样

myJSON.tmp[0].a = 10;
myJSON.tmp2[0][1].c2_str = "hello world"

任何输入都受到高度赞赏

4

1 回答 1

0

Javascript 属性不像在 C 中那样输入,因此在 javascript 中没有纯粹的“等价”表达式。您不会像 C 代码那样预先声明类型化数据结构。我在 javascript 中给定的变量或属性可以分配任何值或引用 - 没有硬输入。因此,如果没有像 C 那样只能包含特定类型的变量,就不会像从 C 中包含的那样预先声明数据结构定义。

相反,您只需声明要在活动对象上使用的属性,或者如果您打算使用其中的许多属性,您可以创建一个原型,您可以在需要时对其进行实例化。

活动对象实例的直接声明有点像您的最后一个结构,如下所示:

var my = {
    number: 10,
    tmp: new Array(100),
    tmp2: new Array(100)
};

这将声明一个名为的对象,该对象my具有三个名为numbertmp的属性tmp2number最初包含数字10,其他两个属性包含长度为 100 的数组,其值为undefined. 我不知道有任何紧凑的方法可以在 javascript 中预定义二维数组,而无需在循环中运行代码来初始化它。

此数据定义将允许您访问my.numbermy.tmp等等。

如果您希望您的数组包含本身具有属性的对象,那么您需要用这些对象填充这些数组。

var my = {
    number: 10,
    tmp: [{a: 1, c_str: "foo"}, {a: 2, c_str: "whatever"}],
    tmp2: new Array(100)
};

或者,在代码中,您可以使用如下代码将 item 添加到 tmp 数组中:

var my = {
    number: 10,
    tmp: [],
    tmp2: []
};

my.tmp.push({a: 1, c_str: "foo"});
my.tmp.push({a: 2, c_str: "whatever"});

或者,您可以单独创建对象,然后将其放入数组中:

var obj = {};        // new empty object
obj.a = 1;           // assign property
obj.c_str = "foo";   // assign property
my.tmp.push(obj);    // put object into the array
obj = {};            // new empty bject
obj.a = 2;
obj.c_str = "whatever";
my.tmp.push(obj);

或者,您可以像这样单独分配每个属性:

my.tmp.push({});           // put empty object into the array
my.tmp[0].a = 1;           // assign property to the object
my.tmp[0].c_str = "foo";   // assign property to the object
my.tmp.push({});
my.tmp[1].a = 2;
my.tmp[1].c_str = "whatever";

无论哪种情况,您都可以像这样访问数据:

console.log(my.tmp[0].a);       // 1
console.log(my.tmp[0].c_str);   // "foo"
于 2012-05-20T05:24:00.897 回答