【问题标题】:How do I correctly split an array of strings of is it another issue?如何正确拆分字符串数组是否是另一个问题?
【发布时间】:2015-08-15 17:08:02
【问题描述】:

我正在尝试根据其他示例here on SO 从字符串数组中访问随机元素。我正在使用 Raphael.js 和下面的区域 [j] 返回一个 Raphael 对象数组 - 因此是 .data(id)。这似乎没问题,但 theCountyNames,如下面的评论中所述,将所有字符串作为一个长字符串返回。我猜这就是为什么 randCounty 返回一个随机字母的原因,但是当我尝试在循环中附加一个逗号 (+",") 并按照this question 使用拆分时,我仍然得到一个随机的单个字母。也许我执行不正确,或者这是另一个问题?谢谢。

 function pickRandCounty(){
var theCountyNames = new Array();
for (var j = 0; j < regions.length; j++) {
theCountyNames = regions[j].data('id');
document.write(theCountyNames);//THIS GIVES ME THE COMPLETE LIST OF ITEMS IN THE ARRAY BUT ALL AS ONE STRING
//document.write("<hr>");
 }
//var randCounty = theCountyNames[Math.floor(Math.random() * theCountyNames.length)];
//document.write(randCounty);//THIS JUST RETURNS ONE RANDOM LETTER??
}

【问题讨论】:

  • 你好像是varing theCountyNames 两次。您似乎在每次迭代中覆盖了 theCountyNames 的旧值,而不是追加。你也在使用document.write? :(
  • 刚刚注意到重复的声明并进行了编辑。 document.write 来自我在这里关注的一个教程youtube.com/watch?v=pqLS4oyJ8cA
  • 最好使用console.logConsole方法来调试(或测试),通常可以F12打开控制台,否则见webmasters.stackexchange.com/questions/8525/…
  • 好的,谢谢您的建议。

标签: javascript arrays string raphael


【解决方案1】:

使用Array.prototype.push 将新项目附加到数组

function pickRandCounty(){
    var theCountyNames = [],
        j;
    for (j = 0; j < regions.length; ++j) {
        theCountyNames.push(regions[j].data('id'));
    }
    j = Math.floor(Math.random() * regions.length);
    return theCountyNames[j];
}

但是,这并没有优化,因为您可以提前设置 Array 的长度,甚至可以完全跳过循环,

function pickRandCounty(){
    var j = Math.floor(Math.random() * regions.length);
    return regions[j].data('id');
}

【讨论】:

  • 优化的部分很棒。我无法朝那个方向思考。
  • 声音,正在工作。谢谢。我需要一段时间来完成优化版本,以了解它为什么会这样工作!
  • @Rudra 对于这些类型的问题,请考虑操作顺序以及是否可以交换它们,即应用转换(对整个数组)然后选择一个 vs 选择一个然后应用转换(对单个)
  • @Paul S 很棒的建议。我会记住这一点
【解决方案2】:

错误似乎在这行。

theCountyNames = regions[j].data('id'); //wrong
theCountyNames.push(regions[j].data('id')); //right

第二个错误

document.write(theCountyNames); //it will keep on appending the string in the DOM
document.write("<br>" + theCountyNames);//right

【讨论】:

  • 感谢 Rudra,首先接受了其他答案,并在解决方案中添加了更多内容,但感谢您花时间提供帮助。
猜你喜欢
  • 1970-01-01
  • 2019-06-21
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多