在回文中查找镜像索引+ javascript

问题描述 投票:0回答:1

我的代码:

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

palindrome('abcba');

在使用调试器和console.log时,我得到了为什么在比较语句中写- i,因为这样可以使我们到达对面的正确索引,但是从一开始就怎么知道这样做呢?

是否有某种说明或某种形式的图来说明- i如何或为什么使您到达对面字符的索引?只是发现很难正确包裹我的包裹。

尽管我想这很难解释,但任何帮助都值得赞赏。

javascript for-loop palindrome indices
1个回答
0
投票

好,让我们分解一下。

str.split('')

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

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

现在您有了一个可以循环遍历并从该数组中选择某些索引的数组。这在回文的情况下非常有用。

因为您想知道单词在镜像时是否相同。您可以从数组的开头和结尾开始计算。

数组中的第一项是索引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条件返回true,则最后返回true;否则,则返回false。

循环还会公开当前索引值。在您称为every的示例中,index的缩写。如果比较完第一个和最后一个值,则要移至数组中的下一项以开始比较第二个和第一个至最后一个值。这就是公式的来源。

i

在第一次迭代中,str.split('').every((char, i) => { return char === str[str.length - i - 1] ? true : false; }); 的值为0。因此您具有公式:i。这给您最后一个项目。

在第二次迭代中,length of the array, subtract 0 and subtract 1现在为1。这意味着我们在数组的第二项中。如果再次将i应用于公式,则可以从数组末尾开始倒数:i。总计为length of the array, subtract 1 and subtract 1

-2

并且在下一次迭代中会出现重叠,但在单词为偶数的情况下不会重叠。但是这里他们都在检查// Second iteration. // Second and first to last item in array. // [1] and [array.length - 2] or [3]. ↓ ↓ ['a', 'b', 'c', 'b', 'a'] 是否匹配c

c

并且继续进行直到到达数组中的最后一项,循环继续向上计数,并且公式向下计数。

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

© www.soinside.com 2019 - 2024. All rights reserved.