我如何在 javascript 部分打印一个字符串
how can i print in javascript a string in parts
我有一个大学练习,我有一个字符串,假设我有:"hello",我想这样打印它:
hhehelhellhello (h he hel hell hello).
我堆的东西是他们想在没有循环的情况下做到这一点!
谁能帮帮我? :/
<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My first paragraph.</p>
<script>
var strin = "hello"
for (i = 0; i < strin.length; i++) {
document.write(strin.slice(0,i+1))
}
</script>
</body>
</html>
也许你可以尝试递归方法:
function print(word, step){
if(word.length<step) return;
console.log(word.substring(1, step));
}
print('hello', 1);
使用递归。代码:
function r (s, i) {
if (i == undefined) i = 0;
if (i == s.length) return "";
return s.slice(0, i + 1) + r(s, i + 1);
}
r("hello"); // hhehelhellhello
可能有更有效的解决方案,但在我的脑海中,这应该可行:
var s = "hello";
var index = 0;
var len = 1;
var newString = '';
function appendToResult(str, index, len) {
newString += str.slice(index, len);
len++;
if (len !== s.length + 1) {
appendToResult(s, index, len);
}
}
appendToResult(s, index, len);
console.log(newString);
你遇到过....递归吗?
你需要实现的是这样的(对于字符串"hello"):
h
he
hel
hell
hello
对方法的递归调用(例如,myPrinter()
)的行为可能类似:
call myPrinter(hello):
call myPrinter(hell):
call myPrinter(hel):
call myPrinter(he):
call myPrinter(h):
print 'h'
print 'he'
print 'hel'
print 'hell'
print 'hello'
done
那么我们如何着手编写我们这个神奇的方法呢?
请注意,在每次调用时,我们都会再次调用我们的方法,但输入较短(实际上,输入已从末尾截断一个字符)。
你可以这样写:
function myPrinter(myString):
myPrinter(myString - last character of myString);
print myString; // and maybe some space
if myString is empty:
return; // do nothing. just return
剩下您要做的就是将上述想法转化为干净无错误的代码。
当然我们必须这样或那样循环。然而在下面的代码中,它被伪装成递归函数。然而我根本没有使用计数变量。它有可能欺骗没有经验的眼睛。我就是这样做的;
function makeStringWeird(s){
var extend = (s, r=[]) => s !=="" ? (r.push(s),extend(s.slice(0,s.length-1),r)) : r;
return extend(s).reverse().join("");
}
console.log(makeStringWeird("hello"));
我为您制定了两个解决方案。一种是使用 reduce 函数,它没有明确使用任何循环,但是当我检查它的 polyfill 时,它使用 while 循环进行迭代。下面给出了它的代码,也可以在 fiddle https://jsfiddle.net/vatsalpande/42590tre/
中看到
(function(){
var convertedString = [];
function reducer(previousValue, currentValue){
convertedString.push(previousValue+currentValue);
return previousValue+currentValue;
}
var string = "hello";
var stringArray = string.split("");
var totalVersion= stringArray.reduce(reducer,"");
console.info(convertedString.join(""));
})();
由于这是使用迭代,所以我单独使用递归又创建了一个。下面是代码和 fiddle link
https://jsfiddle.net/vatsalpande/tnxsuw75/
(function(){
var string = "hello";
var stringArray = string.split("");
var convertedValue = [];
function convert(initialValue, index){
if(index < stringArray.length){
convertedValue.push(initialValue+stringArray[index]);
convert(initialValue+stringArray[index], index+1);
}
}
convert("",0);
console.info(convertedValue.join(""));
})();
希望这些对你有所帮助。
非常感谢任何改进它们的反馈。
快乐学习:)
我有一个大学练习,我有一个字符串,假设我有:"hello",我想这样打印它:
hhehelhellhello (h he hel hell hello).
我堆的东西是他们想在没有循环的情况下做到这一点!
谁能帮帮我? :/
<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My first paragraph.</p>
<script>
var strin = "hello"
for (i = 0; i < strin.length; i++) {
document.write(strin.slice(0,i+1))
}
</script>
</body>
</html>
也许你可以尝试递归方法:
function print(word, step){
if(word.length<step) return;
console.log(word.substring(1, step));
}
print('hello', 1);
使用递归。代码:
function r (s, i) {
if (i == undefined) i = 0;
if (i == s.length) return "";
return s.slice(0, i + 1) + r(s, i + 1);
}
r("hello"); // hhehelhellhello
可能有更有效的解决方案,但在我的脑海中,这应该可行:
var s = "hello";
var index = 0;
var len = 1;
var newString = '';
function appendToResult(str, index, len) {
newString += str.slice(index, len);
len++;
if (len !== s.length + 1) {
appendToResult(s, index, len);
}
}
appendToResult(s, index, len);
console.log(newString);
你遇到过....递归吗?
你需要实现的是这样的(对于字符串"hello"):
h
he
hel
hell
hello
对方法的递归调用(例如,myPrinter()
)的行为可能类似:
call myPrinter(hello):
call myPrinter(hell):
call myPrinter(hel):
call myPrinter(he):
call myPrinter(h):
print 'h'
print 'he'
print 'hel'
print 'hell'
print 'hello'
done
那么我们如何着手编写我们这个神奇的方法呢?
请注意,在每次调用时,我们都会再次调用我们的方法,但输入较短(实际上,输入已从末尾截断一个字符)。
你可以这样写:
function myPrinter(myString):
myPrinter(myString - last character of myString);
print myString; // and maybe some space
if myString is empty:
return; // do nothing. just return
剩下您要做的就是将上述想法转化为干净无错误的代码。
当然我们必须这样或那样循环。然而在下面的代码中,它被伪装成递归函数。然而我根本没有使用计数变量。它有可能欺骗没有经验的眼睛。我就是这样做的;
function makeStringWeird(s){
var extend = (s, r=[]) => s !=="" ? (r.push(s),extend(s.slice(0,s.length-1),r)) : r;
return extend(s).reverse().join("");
}
console.log(makeStringWeird("hello"));
我为您制定了两个解决方案。一种是使用 reduce 函数,它没有明确使用任何循环,但是当我检查它的 polyfill 时,它使用 while 循环进行迭代。下面给出了它的代码,也可以在 fiddle https://jsfiddle.net/vatsalpande/42590tre/
中看到(function(){
var convertedString = [];
function reducer(previousValue, currentValue){
convertedString.push(previousValue+currentValue);
return previousValue+currentValue;
}
var string = "hello";
var stringArray = string.split("");
var totalVersion= stringArray.reduce(reducer,"");
console.info(convertedString.join(""));
})();
由于这是使用迭代,所以我单独使用递归又创建了一个。下面是代码和 fiddle link https://jsfiddle.net/vatsalpande/tnxsuw75/
(function(){
var string = "hello";
var stringArray = string.split("");
var convertedValue = [];
function convert(initialValue, index){
if(index < stringArray.length){
convertedValue.push(initialValue+stringArray[index]);
convert(initialValue+stringArray[index], index+1);
}
}
convert("",0);
console.info(convertedValue.join(""));
})();
希望这些对你有所帮助。
非常感谢任何改进它们的反馈。
快乐学习:)