将元素添加到记录数组

Add element to array of records

抱歉,我是 JS 新手。我找到了对 .push 的引用以将元素添加到数组并使用 'function' 来定义对象的结构,但我希望代码尽可能简单以便于教学!

这是我的代码:

"use strict";
var ListItem = {
  field1: "",
  field2: 0
};
var DataList = [{
  field1: "",
  field2: 0
}];


for (var x = 0; x < 3; x++) {
  DataList.push(ListItem)
  DataList[x].field1 = prompt("item " + x + " Enter f1 data:");
  DataList[x].field2 = prompt("item " + x + " Enter f2 data:");
}
for (x = 0; x < 3; x++) {
  document.write(x + ": " + DataList[x].field1 + " and " + DataList[x].field2 + "<br/>");
}

这只是我反复试验的最新版本。

我想创建一个结构化数据类型的数组,然后向其中动态添加元素。我已经尝试了第 7 行(DataList.push)的几种替代方法,例如 DataList[x] = ListItem;

抱歉,如果之前有人问过这个问题,但我找不到简单的解决方案!

顶部的那两个声明似乎没什么作用,您不必在 JavaScript 中预先声明您的字段。这应该可以解决问题:

"use strict";
var dataList = []; 

for (var x=0;x<3;x++) {
    dataList.push({}) // make new object
    dataList[x].field1 = prompt("item " + x + " Enter f1 data:");
    dataList[x].field2 = prompt("item " + x + " Enter f2 data:");
}
for (x=0;x<3;x++) {
    document.write(x + ": " + dataList[x].field1  + " and " + dataList[x].field2 + "<br/>");
}

不过,应该提到的是,这是一件非常可怕的事情..

const dataList = [];

for(var i = 0; i < 3; i++)
  dataList[i] = {
    field1: prompt("field1 of " + i),
    field2: prompt("field2 of " + i)
  };

一些注意事项:

1) Javascript 是动态的,这就是它的妙处。不要尝试 "init" 一个数组,就好像它是无限的一样使用它。

2) 所有标识符都以小写开头,除了它们是构造函数。

3) 整理您的代码!这意味着尽可能添加空格。

PS:打印列表:

document.body.innerHTML = dataList.map( el => `${el.field1} and ${el.field2}`).join("<br>");

或使用旧式 for 循环:

for(const el of dataList)
  document.body.innerHTML += el.field1 + " and " + el.field2 + "<br>";