javascript - 如何制作识别相似元素字符串的 JavaScript 代码?

标签 javascript algorithm variables

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

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 的数量?

谢谢

最佳答案

您说过您愿意使用数组。看起来像这样:

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);
}

Array#forEach 调用您为每个条目提供的函数一次,传入条目。我们用它来与 found 进行比较,如果匹配,我们增加 count。如果没有(这不会是第一次),我们会说出我们之前发现的东西(如果有的话),然后记住我们发现的新东西。

found 在第一次通过时不会是 === entry 的原因是变量的默认值为 undefined,并且 undefined 不是 === 0 或 1,因为 === 是“严格”相等运算符,这意味着操作数只有当它们具有相同的类型和值时才被认为是相等的。 undefined 不是一个数字,所以它没有相同的类型。

实例:

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) {
      snippet.log("Found " + count + " " + found);
    }
    found = entry;
    count = 1;
  }
});
if (count) {
  snippet.log("Found " + count + " " + found + "s");
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于javascript - 如何制作识别相似元素字符串的 JavaScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34229284/

相关文章:

javascript - 添加一个新对象到 knockout observable 数组

javascript - 我们可以在 css "javascript"中使用 "background"代码吗?

javascript - 阻止字符串末尾的垂直空格 - 正则表达式

javascript - iPad 书签不弹出

algorithm - 有任何客户端方法可以像变量一样重用数据 URI 吗?

algorithm - 自上而下的内存需要更大的表尺寸

java - 以这种方式找到排列的复杂性是什么?

php - 在访问$_POST、$_GET等变量时避免在PHP中使用isset?

c++ - 声明 C++ 中的类型太多

ruby-on-rails - 如何访问在事务中创建的变量?