Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 遍历数组中的3项_Javascript - Fatal编程技术网

Javascript 遍历数组中的3项

Javascript 遍历数组中的3项,javascript,Javascript,我有以下数组: var text = [ "RISE AND SHINE, JONATHON! HMM, ", "THAT'S A MOUTHFUL, HOW ABOUT ", "I JUST CALL YOU JOHN? MY ", "NAME IS PROFESSOR ", "PHIL. I BUILT YOU FROM ", "SCRATCH. I WANT TO TELL YOU ", "A LITTLE STORY BE

我有以下数组:

var text = [
    "RISE AND SHINE, JONATHON! HMM, ", 
    "THAT'S A MOUTHFUL, HOW ABOUT ", 
    "I JUST CALL YOU JOHN? MY ", 
    "NAME IS PROFESSOR ", 
    "PHIL. I BUILT YOU FROM ", 
    "SCRATCH. I WANT TO TELL YOU ",
    "A LITTLE STORY BEFORE WE START."
];
然后我在数组中循环:

for (var i = 0; i < 3; i++) {
    this.font.draw(text[i]);
}

我需要的帮助是创建一个函数,该函数将遍历接下来的3行,然后显示:

NAME IS PROFESSOR
PHIL. I BUILT YOU FROM
SCRATCH. I WANT TO TELL YOU
…等等

这是我为一个JavaScript/HTML5游戏编写的聊天泡泡代码,在这个游戏中,我的聊天对话在任何给定时间都只能容纳3行文本


一旦对话达到最后一句话。我希望它从一开始就继续。

我不太确定这是什么意思,但您可以创建一个简单的函数:

function display_text(start, end) {
    for (var i = start; i < end; i++) {
        this.font.draw(text[i]);
    }
}

我想你需要一个通用的方法, 也许这会有所帮助。
这里是JS方法

var text = [
    "RISE AND SHINE, JONATHON! HMM, ",
    "THAT'S A MOUTHFUL, HOW ABOUT ",
    "I JUST CALL YOU JOHN? MY ",
    "NAME IS PROFESSOR ",
    "PHIL. I BUILT YOU FROM ",
    "SCRATCH. I WANT TO TELL YOU ",
    "A LITTLE STORY BEFORE WE START."
];
var len=3;
for(var i=0;i<text.length;i+=len)
{
  for(var j=0;j<len && (i+j)<text.length;j++)
  {
      $('#text').html($('#text').html()+text[i+j]+'<br/>');
  }
  $('#text').html($('#text').html()+'<br/><br/>');
}
var text=[
“振作起来,乔纳森!嗯,”,
“那是一口,怎么样”,
“我就叫你约翰?我的朋友”,
“名字是教授”,
“菲尔,我用它造了你”,
“抓挠,我想告诉你”,
“在我们开始之前先讲个小故事。”
];
var-len=3;

对于(var i=0;i如果我理解正确,您可以做的是备份阵列并将其拼接到所有行都已读取。换句话说:

var textOut = text,
    len = text.length / 3,
    i = 0;
for ( ; i < len; i++ ) {
  setTimeout(function() {
    console.log( textOut.splice(0, 3).join(' ') );
  }, i*1000 );
}
var textOut=text,
len=text.length/3,
i=0;
对于(;i
上述内容将每秒记录3行,直到读取所有行。
顺便说一句,您不需要在每个字符串的末尾加空格,因为您可以使用
join
和空格


演示:

如果我正确想象了你的聊天泡泡,像这样的东西可能适合你:

    var text = [
    "RISE AND SHINE, JONATHON! HMM, ", 
    "THAT'S A MOUTHFUL, HOW ABOUT ", 
    "I JUST CALL YOU JOHN? MY ", 
    "NAME IS PROFESSOR ", 
    "PHIL. I BUILT YOU FROM ", 
    "SCRATCH. I WANT TO TELL YOU ",
    "A LITTLE STORY BEFORE WE START."
];

var max_lines = 3;

var length = text.length;

num_bubbles = length/max_lines; 
if (!(length%max_lines)){
    num_bubbles = num_bubbles + 1;
}


var print_bubble = function(i,text){
    console.log("***start of text bubble****");
    for(j=i*max_lines; j<length && j<(i+1)*max_lines; ++j){
        console.log(text[j] + '\n');//print text bubble contents
    }
}

for (var i = 0; i <num_bubbles ;++i){
    print_bubble(i, text);
}​
var text=[
“振作起来,乔纳森!嗯,”,
“那是一口,怎么样”,
“我就叫你约翰?我的朋友”,
“名字是教授”,
“菲尔,我用它造了你”,
“抓挠,我想告诉你”,
“在我们开始之前先讲个小故事。”
];
var max_线=3;
var length=text.length;
num_气泡=长度/最大线;
如果(!(长度%max_行)){
num_bubbles=num_bubbles+1;
}
var print_bubble=函数(i,文本){
console.log(“***文本气泡的开头****”);

对于(j=i*max_lines;j而言,它不是一种干净的解决方案,但有效:

document.getElementById(“输出”).innerHTML=“”;
变量文本=[
“振作起来,乔纳森!嗯,”,
“那是一口,怎么样”,
“我就叫你约翰?我的朋友”,
“名字是教授”,
“菲尔,我用它造了你”,
“抓挠,我想告诉你”,
“在我们开始之前先讲个小故事。”
];
var计数器=0;
var s=0;//开始索引
var e=0;//结束索引
var l=text.length;
var out=”“;//仅用于测试/调试
while(计数器<15)//防止浏览器冻结/无限循环
{
如果(e+3”;
document.getElementById(“输出”).innerHTML+=out;
}
document.getElementById(“输出”).innerHTML+=“
”;//在3个项目后分开 s=e; if(e==l)//重置:从零开始 { s=0; e=0; } 计数器++; } ​
我不清楚。如果有12行怎么办?然后程序应该做什么“遍历接下来的3行”…何时?立即?在“X”发生后?更多信息会很有帮助…我在问题中解释了我的推理。这是一个只能容纳3行的聊天对话。因此我需要进入数组中的下3行。好的。我只是不太确定我是否理解您的最终目标。这段代码会有帮助,还是我误解了一些事情?
while(true)
可能会冻结浏览器。我会删除它。我可以尝试一下,只要你能告诉我方法的签名和当前状态(输入)所需的输出。但是,扩展我编写的代码应该不是什么大问题。
var textOut = text,
    len = text.length / 3,
    i = 0;
for ( ; i < len; i++ ) {
  setTimeout(function() {
    console.log( textOut.splice(0, 3).join(' ') );
  }, i*1000 );
}
    var text = [
    "RISE AND SHINE, JONATHON! HMM, ", 
    "THAT'S A MOUTHFUL, HOW ABOUT ", 
    "I JUST CALL YOU JOHN? MY ", 
    "NAME IS PROFESSOR ", 
    "PHIL. I BUILT YOU FROM ", 
    "SCRATCH. I WANT TO TELL YOU ",
    "A LITTLE STORY BEFORE WE START."
];

var max_lines = 3;

var length = text.length;

num_bubbles = length/max_lines; 
if (!(length%max_lines)){
    num_bubbles = num_bubbles + 1;
}


var print_bubble = function(i,text){
    console.log("***start of text bubble****");
    for(j=i*max_lines; j<length && j<(i+1)*max_lines; ++j){
        console.log(text[j] + '\n');//print text bubble contents
    }
}

for (var i = 0; i <num_bubbles ;++i){
    print_bubble(i, text);
}​
document.getElementById("output").innerHTML= "";
var text = [
    "RISE AND SHINE, JONATHON! HMM, ", 
    "THAT'S A MOUTHFUL, HOW ABOUT ", 
    "I JUST CALL YOU JOHN? MY ", 
    "NAME IS PROFESSOR ", 
    "PHIL. I BUILT YOU FROM ", 
    "SCRATCH. I WANT TO TELL YOU ",
    "A LITTLE STORY BEFORE WE START."
];
var counter = 0;
var s = 0;  //start index
var e = 0;  //end index
var l = text.length;
var out = "";  //just for testing/debugging

while(counter < 15)  //to prevent the browser from freezing/infinite loop
{
  if(e+3 < l)  //take 3 items if we have more than 3 left
      e = e +3;
  else
      e = l;  //else use the remaining

  for (var i = s; i < e; i++) {
    out = (text[i])+"<br>";
      document.getElementById("output").innerHTML+=out;

  }
document.getElementById("output").innerHTML+="<HR>";  //separates after 3 items
s = e;
if(e == l) //reset: start from zero
{
    s = 0;
    e = 0;
}

  counter++;    
}
​