刚刚学习javascript,对不起初学者的问题!
如何简化下面的数组?我想在数组中添加额外的项目,但是我开始担心数组的持续时间。是否有更简洁的方式来写这个?
void main()
{
int cnt=1;
char i;
while(cnt<4)
{
printf("\nenter the character");
scanf("%c",&i);
if(i>64 && i<91)
printf("\ncharacter is entered");
else
printf("\nnumber is entered");
cnt++;
}
}
提前致谢。
答案 0 :(得分:0)
在你的具体情况下,我可以这样做:
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);
至于数据库,有很多解决方案。
答案 1 :(得分:0)
你已经拥有的东西本来就没有任何错误。只是似乎就像你在数组中有很多东西一样。请考虑以下示例:
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);
}