【问题标题】:Connecting text relating to array object: how and where?连接与数组对象相关的文本:如何以及在哪里?
【发布时间】:2015-02-22 00:41:50
【问题描述】:

我正在开展一个项目,在该项目中,我需要通过几种方法将数组中的对象(特别是字符串)连接到额外的文本位(相当于几句话)。

目前我有一个函数可以创建数组并用与正在玩的游戏相关的值(字符串和数字)填充它:

/* store names by male and female for selection later */
var aliasM = ["Spike", "Mike", "Pops", "Noodles", "Shorty"];
var aliasF = ["Shanna", "Rose", "Sugar", "Alana"];

function aliasSelector() {
  if (Math.random() <= 0.55) {
    alias = aliasM[Math.floor(Math.random() * aliasM.length)];
    var mTook = aliasM.indexOf(alias);
    aliasM.splice(mTook, 1)
  } else {
    alias = aliasF[Math.floor(Math.random() * aliasF.length)];
    var fTook = aliasF.indexOf(alias);
    aliasF.splice(fTook, 1);
  }
  return alias;
}

function playerGen(name, alias, turns, mech, cash, credit) {
  this.name = name;
  this.alias = aliasSelector();
  this.turns = 0;
  this.mech = Math.ceil(Math.random() * 5);
  this.cash = 1000 + Math.round(Math.random() * 1000);
  this.credit = Math.round(Math.random() * 2000);
}

/*Next we create array objects for each player */
function nameCheck() {
  p1 = document.getElementById("p1Entry").value;
  if (p1 !== "") {
    playerList.push(new playerGen(p1));
  }
  /* and so on */
}

我想包含的是每个别名的简短描述。因此,如果玩家获得别名“Spike”,则会有一小段 someplace 告诉我们关于 Spike。

如果不将句子包含在数组中,我不确定如何建立这种联系。我在想某种条件可能会起作用,或者创建某种将名称连接到段落的符号,存储为变量spikeInfo。我认为最后一种方法最有意义,例如:

var SpikeInfo = "Spike is an HVAC specialist from Fresno who....";

这些东西可以存储在另一个文件中,还是这样做有价值?那是一个 .txt 文件,还是另一个 .js 文件?

【问题讨论】:

  • 你是在网页还是其他地方使用这个?
  • 现在它在网页中。我正在尝试提高我的编程水平以增强我的教学(我教高中多媒体)并做一些与我对摩托车的热爱有关的爱好类型的东西。所以我可能会尝试将其倒入 PhoneGap 设置并创建一个移动应用程序,虽然我得到的印象是,最好用目标设备的本地语言来做一个真正的应用程序。就学习编程而言,这是朝着正确方向的开始。我希望。
  • 总的来说,我希望能够更新内容以将不同的场景和角色添加到应用程序中。

标签: javascript arrays file external


【解决方案1】:

如果您希望在网页上执行此操作,并且如果您将别名上的信息存储为名为 nameBio.html 或类似文件的文件,则可以使用 AHAH 获取并插入简历。 AHAH 将获取文件并将其插入到 HTML 元素中。如果您想在加载后收集文本,只需获取您将其提取到的元素的innerHTML,或修改 AHAH 代码。

这是一个例子

HTML

<div id="name"></div>
<div id="bio"></div>

JS

//Let's assume your randomly picked name is stored in a variable called randNm 
var fileName = randNm + "Bio.html";
ahah(filename,bio)

document.getElementById("name").innerHTML = randNm;
var bioText = document.getElementById("bio").innerHTML

nmBio.html:

<!--This Bio Should Be Stored Like This -->
<p>
    Lorem Ipsum Dolor Sit Amet Is Absolute Gibberish And Not Even Close To Real Latin...
</p>

如果名称是“Spike”,那么这段代码将获取一个名为“SpikeBio.html”的文件这当然不是一个简洁或优雅的解决方案,但它只需要很少的代码。

你也可以有两个数组:

JS:

var names = ["name1","name2",...];
var bios = ["BioForName1","BioForName2",...];
var whichName = Math.floor(Math.random()*names.length-1);
var chosenName = names[whichName];
var chosenBio = bios[whichName];

这假定名称的简历与其数组中的名称在其数组中的位置相同。

【讨论】:

  • 在您在这里指出的两种方法中,我认为第一种是最有效的(尽管对我来说是新的),仅仅是因为它只加载所需的信息。在我最初的工作中,我可能有十个男性和女性身份(无论玩家的性别如何分配),但如果我真的开始,我会显着添加到列表中。
  • 另一方面,您的纯 Javascript 版本也非常干净,让我可以从我的 Javascript 中思考一个真正的应用程序。我当前的版本在选择数组后会从数组中删除别名,并且(我认为?)将其值传输到 player 数组。与您的示例中显示的生物相同。谢谢!
  • 深,我用的是Js版本。我之前有部分名称选择器按性别随机拆分,但唯一重要的地方是名称和简历,其中可以包含性别。因此,我将两个数组(用于 m&f)合并为一个,以便按照您的建议从单独的列表中获取简历。工作顺利。我怀疑我对更发达版本中字符数量的担忧可能没有实际意义。
【解决方案2】:

我会使用像这样的对象文字将段落包含在数组中

 [{Name:"spike",Bio:"foo"}, ...]

您可以将其存储为 Json 并使用内置的 js Jason 对象加载它。

【讨论】:

  • 感谢 Nick:这似乎使我能够将所有数据保存在一个地方。我想我已经看到了一些示例,这些示例允许从通过点符号引用数组的列表创建数组,这也是一种很好的可读格式。我不得不去查找更多关于 Json 的信息。虽然我对 Javascript 还比较陌生,但跳到 Json(我听说过并且在我用来学习的文本中)并不算太远,而且看起来很简单(显然是设计使然)。感谢您的指导。
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2012-03-07
  • 2020-09-28
  • 2013-01-29
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多