我编写了一个名为var data = [
{ entryId: 'ABC', mobile: '0123456789' },
{ entryId: 'BBB', mobile: '1111111111' },
{ entryId: 'CCC', mobile: '2222222222' }
];
var dataWithMobileNumbersOnly = data.map((obj) => {
return { mobile: obj.mobile };
});
console.log(dataWithMobileNumbersOnly) // [{mobile: '0123456789'}, {mobile: '1111111111'}, {mobile: '2222222222'}]
的函数,它接受一个字符串作为参数并返回字符串,但字符反向。
例如:reverseStr
=> reverseStr('bootcamp');
以下是我的计划:
'pmactoob'

如果我运行函数function reverseStr(str)
{
var splitStr = str.split("");
console.log(splitStr);
var reverseString = [];
for(var i = 0; i <= splitStr.length -1 ; i++)
{
for(var j = splitStr.length - 1; j >= 0; j--)
{
reverseString[i] = splitStr[j]
}
}
return reverseString.toString().replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
}
,则返回reverseStr("bootcamp")
。
有没有人看到代码有问题?
注意:我不想使用bbbbbbbb
内置功能
但是,我发现以下代码取得了成功,但仍需要回答我的初步问题
REVERSE()
&#13;
答案 0 :(得分:1)
您不需要对字符进行双重迭代,即不需要嵌套for
循环。迭代一次并以相反的顺序抓住字符,如下所示:
function reverseStr(str)
{
var splitStr = str.split("");
console.log(splitStr);
var reverseString = [];
for(var i = 0, j=splitStr.length-1; i <= splitStr.length -1 ; i++, j--)
{
reverseString[i] = splitStr[j]
}
return reverseString.toString().replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
}
你可以看到这里循环的持续时间与i <= splitStr.length -1
一样长,即字符串的长度。这足以获得镜像字符(i
与Array.length-i
)。
以下是演示的工作片段:
var reverseStr = function(str) {
let result = String();
for(let i = str.length-1; i >= 0; i--) {
result += str.charAt(i);
}
return result.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
}
$('button').click(function() {
$('.result').text(reverseStr($('#str').val()));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str">
<button>Reverse it</button>
<div class="result"></div>
&#13;
实现相同的更优雅的方法(除了 Array.prototype.reverse())也许是使用String.prototype.chatAt()
。这样可以避免两次与数组的转换,也可以保存一个变量。当然,代码更短,更明显。
var reverseStr = function(str) {
let result = String(); // An empty string to store the result
for(let i = str.length-1; i >= 0; i--) { // Iterate backwards thru the chars and add to the result string
result += str.charAt(i);
}
return result.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); // Original return method of the author
}
$('button').click(function() {
$('.result').text(reverseStr($('#str').val()));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str">
<button>Reverse it</button>
<div class="result"></div>
&#13;
答案 1 :(得分:0)
问题在于,嵌套的for
循环在返回外部for
循环之前会运行整个过程。因此,它只重复一个字符的次数等于长度。不要再使用其他for
循环,只需在外j
循环中为j++
for
添加一个简单的计数器,并将该值与i
值一起使用。
答案 2 :(得分:0)
对于原始海报,请考虑一下:
如果你知道原始字符串的长度,你就会知道原始字符串中最后一个位置的偏移量。
以相反的顺序迭代原始字符串,将当前位置的值附加到新字符串。新字符串将与原始字符串相反。
答案 3 :(得分:0)
Aydin的例子基本上是正确的。这是我非常相似的版本,有评论:
function reverseString(inputString) {
// create a new empty string
var newString = "";
// iterate through the characters of the string in reverse order,
// appending to the new string
for (var i = inputString.length - 1; i >= 0; i--) {
newString += inputString[i];
}
return newString;
}
console.log(reverseString('bootcamp'));