JavaScript中与C/C++数据结构等效的是什么?

6
假设我在C语言中有以下内容:
struct address{
   char name;
   int  id; 
   char address;
 };

struct address adrs[40];       //Create arbitrary array of the structure. 40 is example
adrs[0].name = 'a';
id[0]        = 1;
...

如何定义和创建用户自定义结构体的数组。

谢谢。


需要注意的是,JavaScript 是基于原型和弱类型的。不过,你可以通过使用对象字面量来创建类似结构体的东西。 - Warty
5个回答

6
如果你要为一个对象定义预设布局,那么你可能需要使用构造函数风格的函数。
function address() {
    this.name = null;
    this.id = null;
    this.address = null;
}

数组不需要指定类型,也不必指定长度。

var adrs = [];

您可以这样创建一个新的address实例。
var item = new address(); // note the "new" keyword here
item.name = 'a';
item.id = 1;
// etc...

然后你可以将新项目push到数组中。
adrs.push(item);

或者你可以从数组中添加一个新项,然后通过索引器进行访问。

// adrs has no items
adrs.push( new address() );
// adrs now has 1 item
adrs[0].name = 'a';

// you can also reference length to get to the last item 
adrs[ adrs.length-1 ].id = '1';

2
@Mark K 数组在调用 push 时会增加其计数器,且从0开始,因此在添加第一个项目后,您可以使用 adrs [0] 访问它,第二个项目将是 adrs [1],以此类推。 - lincolnk

3

等价的做法是创建一个关联数组的数组。

var arr = new Array();
arr[0] = { name: "name 1", id: 100, address: "addr 01" };
arr[1] = { name: "name 2", id: 101, address: "addr 02" };
//...

完成这个步骤之后,您将能够做到以下事情:
arr[0].name = "new name 1";

或访问元素:

if (arr[1].name == "name 2") { // will be true
}

希望这能有所帮助。

1
答案非常简单。
const address = {
    name: ""
    id: 1,
    address: ""
}

或者动态的。
const address = (name, id, address) => {
// Here your checks if enters is correct
    return {name, id, address}
}

如果你使用TypeScript?这很简单。
interface address {
    name: string;
    id: number;
    address: string;
}

const adress: adress = {
    .....
}

0
<script type="text/javascript">

    function address() 
    {
       this.name="";
       this.id=0;
       this.address=""
    }
    var addresses = new Array(40);

    addresses[0] = new address();
    addresses[1] = new address();
    .....
    .....
    addresses[0].name = 'a';
    addresses[1].id = 5;


</script>

你不能像调用方法一样调用一个字面量对象。new address() 不起作用。 - lincolnk
1
在函数中,你不能像字面对象那样使用 name:value 的表示方式。 - lincolnk
@Robert 不是的,是你在定义标签而不是成员变量。var a = new address(); alert(a.id); 显示 undefined - lincolnk
@lincoln。你说得对。我偶然发现了一个有趣的小事情。正在修改我的代码。 - Robert
@Robert,现在你正在声明“private”变量,这些变量无法从address的范围之外访问。 - lincolnk

0
结构体可以解决的常见问题是排名系统。一个包含某些用户的名称和数字的数组,然后根据数字对用户进行排序。这里是该问题的JavaScript实现。这里使用了对象数组。

<!DOCTYPE html>
<html>
<head>
 <title>Structure</title>
</head>
<body>
<label>Enter Student Name 1:</label>
<input type="text" id='n0'  name=""><br>
<label>Enter Student Mark 1:</label>
<input type="text" id='m0' name=""><br>
<label>Enter Student Name 2:</label>
<input type="text" id='n1' name=""><br>
<label>Enter Student Mark 2:</label>
<input type="text" id='m1' name=""><br>
<label>Enter Student Name 3:</label>
<input type="text" id='n2' name=""><br>
<label>Enter Student Mark 3:</label>
<input type="text" id='m2' name=""><br>
<input type="button" value="Ranking" onclick="result()">
<div id='id'></div>

<script type="text/javascript">
 
function result()
{
 var b=new Array(100);
 var n1=document.getElementById('n0').value;
 var m1=document.getElementById('m0').value;
 var n2=document.getElementById('n1').value;
 var m2=document.getElementById('m1').value;
 var n3=document.getElementById('n2').value;
 var m3=document.getElementById('m2').value;


 

 var a=new Array(100);
 var b=new Array(100);
 var n,m,j,i,temp,t,r="<br>Ranking<br><br>";

    for(i=0;i<3;i++)
    {

        n=document.getElementById('n'+i).value;
        m=document.getElementById('m'+i).value;
        m=parseInt(m);
     a[i]={name:n,mark:m};
    }

    for(i=0;i<3;i++)
    {
 
      for(j=i+1;j<3;j++)
      {
     if(a[j].mark>a[i].mark)
     {
             temp=a[i].mark;
             t=a[i].name;
             a[i].mark=a[j].mark;
             a[i].name=a[j].name;
             a[j].mark=temp;
             a[j].name=t;

             //console.log(a[i].name);
          //console.log(a[i].mark);

     }
      }
    }

    for(i=0;i<3;i++)
    {
        r=r+a[i].name+"  ";
        r=r+a[i].mark+"<br>";
     //console.log(a[i].name);
     //console.log(a[i].mark);
    }


    document.getElementById('id').innerHTML=r;

}

</script>
</body>
</html>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接