寻找回文中的镜像索引 + 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']
这一直持续到数组中的最后一项,循环继续向上计数,公式向下计数。
我希望这是有道理的,并能帮助您更多地理解它。
我的代码:
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']
这一直持续到数组中的最后一项,循环继续向上计数,公式向下计数。
我希望这是有道理的,并能帮助您更多地理解它。