寻找回文中的镜像索引 + javascript

Finding the mirror index in a palindrome + javascript

我的代码:

function palindrome(str) {
    return str.split('').every((char, i) => {
        return char === str[str.length - i - 1] ? true : false;
    })
}

palindrome('abcba');

在使用调试器和 console.log 时,我明白了为什么我们在比较语句中写 - i,因为这使我们到达了另一侧的正确索引,但人们怎么知道这样做从头开始?

是否有某种解释或图表可以解释 - i 如何或为何将您带到对面字符的索引处?只是发现很难将我的手包裹在这个周围。

非常感谢任何帮助,尽管我认为这很难解释。

好吧,让我们分解一下。

str.split('')

此行将您的 'abcba' 字符串分解为一个数组。结果将是:

['a', 'b', 'c', 'b', 'a']

现在您有了一个可以循环的数组和select 数组中的某些索引。这在回文的情况下非常有用。

因为你想知道镜像的时候这个词是不是一样的。你从数组的头部和尾部开始计算。

数组中的第一项是 0 的索引 [0] 和最后一项,这取决于数组。但是如果你有数组并减去 [array.length - 1],在单词 abcba 中是 [5 - 1],你最终得到数组中的最后一项,它有4 [4].

的索引
// First iteration.
// First and last items in array.
// [0] and [array.length - 1] or [4].

  ↓                   ↓
['a', 'b', 'c', 'b', 'a']

所以在循环中,你在数组中从左到右。并将第一个值与最后一个值进行比较。您的示例使用 every 方法,如果循环中的 every 条件返回真,则该方法最后 returns 为真,否则为假。

该循环还公开了一个当前索引值。在您称为 i 的示例中,index 的缩写。如果你完成了第一个和最后一个值的比较,你想转移到数组中的下一个项目,开始比较第二个和第一个到最后一个值。这就是公式的来源。

str.split('').every((char, i) => {
  return char === str[str.length - i - 1] ? true : false;
});

在第一次迭代中,i 的值为 0。因此您有公式:length of the array, subtract 0 and subtract 1。这给了你最后一项。

在第二次迭代中,i 现在是 1。这意味着我们在数组的第二项中。如果再次对公式应用i,则可以从数组末尾开始倒数:length of the array, subtract 1 and subtract 1。加起来等于 3.

// Second iteration.
// Second and first to last item in array.
// [1] and [array.length - 2] or [3].

       ↓         ↓
['a', 'b', 'c', 'b', 'a']

在下一次迭代中你会得到重叠,但在偶数单词的情况下不会。但在这里他们都在检查 c 是否匹配 c.

// Third iteration.
// Third and and second to last item in array.
// [2] and [array.length - 3] or [2].

            ↓
            ↓
['a', 'b', 'c', 'b', 'a']

这一直持续到数组中的最后一项,循环继续向上计数,公式向下计数。

我希望这是有道理的,并能帮助您更多地理解它。