如何在Javascript中简化此数组?

如何在Javascript中简化此数组?,javascript,arrays,Javascript,Arrays,只是在学习javascript,对于初学者的问题很抱歉 如何简化下面的数组?我想向数组中添加其他项,但我关心的是数组的长度。有没有更简洁的方法来写这个 var material; material = [ { name: 'item 1' }, { name: 'item 2' }, { name: 'item 3' }, { name: 'item 4' }, { name: 'item 5' }, { name: 'i

只是在学习javascript,对于初学者的问题很抱歉

如何简化下面的数组?我想向数组中添加其他项,但我关心的是数组的长度。有没有更简洁的方法来写这个

var material;

material = [
  {
    name: 'item 1'
  }, {
    name: 'item 2'
  }, {
    name: 'item 3'
  }, {
    name: 'item 4'
  }, {
    name: 'item 5'
  }, {
    name: 'item 6'
  }
];

$('.random').click(function() {
  var index;
  this.materials = $('.materials');
  index = Math.floor(Math.random() * material.length);
  this.materials.text(material[index].name);
});

提前谢谢

在您的具体情况下,我可以这样做:

function toMaterial(value) {
    return {
        name: value
    }
}
var items = ['item1', 'item2', 'item3', 'item4', 'item5']
var material = items.map(toMaterial)
这可以帮助您在不占用太多空间的情况下扩展材料列表,但它提出了另一个问题。。。如果对象是您仅有的属性,那么为什么需要具有name属性的对象。如果您希望添加更多属性,那么这种方法几乎没有帮助

在任何情况下,您最好将这些对象记录在数据库中并从那里读取它们。代码不应该包含这样的任何类型的数据。它还将帮助您扩展数据库中包含的数据,而无需修改代码

如果外部数据库不是您的解决方案,您可以尝试构建某种本地数据库,将数据存储在对象中。然后可以将数据库导出为json文件。然后,只需加载json文件,并在修改数据库时进行更新

var db = {
  "materials": [
  {
    name: 'item 1'
  }
  ]
}

function output(db) {
  return JSON.stringify(db)
}

function loadDB(text) {
  db = JSON.parse(text)
}
然后将这些行更改为:

index = Math.floor(Math.random() * db.material.length);
this.materials.text(db.material[index].name);

至于数据库,有很多解决方案。

这里已经有的东西本身并没有什么问题。看起来阵列中有很多东西。考虑下面的例子:

var a = {name: "item1"};
var b = {name: "item2"};
var c = {name: "item3"};
var d = {name: "item4"};
var e = {name: "item5"};
var f = {name: "item6"};

var material = [a,b,c,d,e,f];
您认为哪个阵列占用更多内存:我的还是您的

这个怎么样

var material = [ {}, {}, {}, {}, {}, {} ];
结果表明,这三个阵列占用的内存量相同

原因是,在所有这三种情况下,数组的实际元素不是对象,而是对这些对象的引用。因此,当您执行
material[3]
时,您将获得对索引3处对象的引用,然后自动跟踪该引用以查找引用所指向的对象(
{name:“item4”}
,在您的原始示例中)

这意味着您存储在阵列中的对象可能是巨大的,具有数百个属性,而阵列本身仍然不会占用更多空间

实际上,在遇到任何性能问题之前,可以在一个数组中存储大量引用,所以现在可能不需要担心这一点

就样式而言,创建对象并将其添加到数组中的方法肯定比将数组和对象作为一个大的长文本写出要好(而且更具可伸缩性),但您不必担心性能

我建议学习更多关于对象的知识,特别是构造函数的工作方式。这样,如果你需要用1000个不同的项目来完成这项工作,你就不必手工写出每个项目。以下是我将如何从原始程序中重写阵列的构造,仅使用1000个元素,而不是仅使用6个元素:

function Material(number) {
    this.name = "item" + number;
}

var materials = [];

for (var i = 1; i <= 1000; i++) {
    var mat = new Material(i);
    materials.push(mat);
}
功能材料(编号){
this.name=“项目”+编号;
}
var材料=[];

对于VAR i=1;在JS中,您应该考虑使用数据库而不是硬编码。在学习曲线的这一点上,我不担心数据库或数组的长度……为什么不尝试通过在该数组中搜索特定项的项来进一步推动自己,然后可以基于某个特定的数组来移动数组中的对象。属性,而不是数据库,您可以只使用AJAX和XML来获取数据库的数据array@Mashpoexml?最好使用json而不是xml。数据库不必是软件。它可以是xml文件或json文件。通过Ajax甚至json的javascript脚本加载就足够了。谢谢。这是关于名称为属性,它实际上什么也不做。我将删除它。至于数据库,那可能是下一次的项目,我仍在尝试找出循环!