Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/144.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代码?_Javascript_Algorithm_Variables - Fatal编程技术网

如何生成识别类似元素字符串的JavaScript代码?

如何生成识别类似元素字符串的JavaScript代码?,javascript,algorithm,variables,Javascript,Algorithm,Variables,我目前正在尝试编写一个JavaScript程序,它能够识别类似元素的字符串。例如,假设您拥有有序变量 var x1 = 1; var x2 = 1; var x3 = 0; var x4 = 0; var x5 = 1; var x6 = 1; var x7 = 1; var x8 = 0; var x9 = 1; var x10 = 0; 我试图生成一个程序,它可以告诉你,这些有序变量包含一个两个1的字符串,一个三个1的字符串,和一个一个1的字符串 我想我可以用一个if语句来实现这一点,比如

我目前正在尝试编写一个JavaScript程序,它能够识别类似元素的字符串。例如,假设您拥有有序变量

var x1 = 1;
var x2 = 1;
var x3 = 0;
var x4 = 0;
var x5 = 1;
var x6 = 1;
var x7 = 1;
var x8 = 0;
var x9 = 1;
var x10 = 0;
我试图生成一个程序,它可以告诉你,这些有序变量包含一个两个1的字符串,一个三个1的字符串,和一个一个1的字符串

我想我可以用一个if语句来实现这一点,比如

var i = 1;
var s = 0;

if(x_i == 1) {
    var s = s ++;
    var i = i++
}

elseif(x_i == 0) {
document.getElementById('string-length').innerHTML = s;

}
然而,将x_i写入每个变量x1、x2、x3、…,显然是不正确的

< >我应该如何使程序按顺序查看每个变量,然后考虑有序变量列表中的连续1个数?
谢谢

首先,我很难记住语言,所以请容忍我…这将是一些丑陋的psudocode

eval将成为你的朋友。

使用一个for循环和一个数组来创建类似这样的值列表

Array numbers = new Array[10]
for(i = 1, i<10, i++){
     numbers [I]=eval("x"+ i).Value()
}
  count = 0
  countsArray[10]
  for(I = 0, I < stuff.size, I++){
      if(stuff[I] = 1)
         count++
      if(stuff[I] = 0){
         countsArray.Add(count);
         count=0;
      }
  }

  //Print your counts or whatever here. 
这会把你的数字列在一个列表中,然后你就可以使用它了

现在可以这样做for循环

Array numbers = new Array[10]
for(i = 1, i<10, i++){
     numbers [I]=eval("x"+ i).Value()
}
  count = 0
  countsArray[10]
  for(I = 0, I < stuff.size, I++){
      if(stuff[I] = 1)
         count++
      if(stuff[I] = 0){
         countsArray.Add(count);
         count=0;
      }
  }

  //Print your counts or whatever here. 

不知道……我想你也可以在一个循环中巧妙地处理这些事情

您说过可以使用数组。看起来是这样的:

var x = [
    1,
    1,
    0,
    0,
    1,
    1,
    1,
    0,
    1,
    0
];
然后,您可以在该阵列中循环,跟踪您看到的内容:

var found; // Defaults to the value `undefined`
var count = 0;
x.forEach(function(entry) {
    if (found === entry) {
        ++count;
    } else {
        if (count) {
            console.log("Found " + count + " " + found + "s");
        }
        found = entry;
        count = 1;
    }
});
if (count) {
    console.log("Found " + count + " " + found);
}
ArrayforEach调用您为每个条目提供的函数一次,并传入该条目。我们用它来比较发现的,如果是匹配的,我们增加计数。如果不是,也不是第一次,我们会说我们以前发现的东西,然后记住我们发现的新东西

在第一个过程中,找不到===项的原因是变量的默认值未定义,而未定义的不是===0或1,因为===是严格的相等运算符,这意味着只有当操作数具有相同的类型和值时,才认为它们相等。undefined不是数字,因此它的类型不同

实例:

变量x=[ 1. 1. 0, 0, 1. 1. 1. 0, 1. 0 ]; 找到变量;//默认值为“未定义”` var计数=0; x、 外汇输入{ 如果找到===条目{ ++计数; }否则{ 如果算上{ snippet.logFound+count++found; } 发现=输入; 计数=1; } }; 如果算上{ snippet.logFound+count++found+s; }
问题在于出发点:您不需要一个名称中有数字的变量列表。你想要一个数组。你应该把变量变成一个对象,这样更容易使用…我不太确定数组是什么。你知道有什么好地方可以让我学习如何使用它们吗?我可以使用像字典一样的对象,但根据规格,对象属性是不排序的。你需要一个数组。使用window[x+i]是你访问变量的一个选项吗?javascript中没有这样的类型。是的,我知道……请看我关于不记住语言的第一条评论。算法是他们需要的,不一定是代码。评估功能将为他提供他们所需的大部分。非常感谢你的帮助。最后一个问题:如何获得输出?我已经尝试将其放入一个基本的HTML脚本中,请参见:,但这并没有给出输出。我还尝试将document.getElementById'div'.innerHTML=Found+count++Found+s添加到函数和HTML中,但这给出了错误的输出。我做错了什么?此外,这是记录输出的最佳方法吗?@user2910074:如上所述,使用console.log,输出位于浏览器开发工具的web控制台部分。好的,那么您能告诉我“console.log”和“snippet.log”之间的区别吗?再次感谢。