我一直在研究递归函数,我开始或多或少地开始理解它们.当我遇到这个并且我不理解时,我正在开展一个免费的代码阵营挑战.for循环内部的递归函数:
function steamroller(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
//If (i)th element is an array
if (Array.isArray(arr[i])) {
newArr = newArr.concat(steamroller(arr[i]));
console.log(newArr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
steamroller([1, [2],[3, [[4]]]]);
//returns [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我很难理解的一句话是:
newArr = newArr.concat(steamroller(arr[i]));
Run Code Online (Sandbox Code Playgroud)
在那条线上,newArr是连接到什么?在.concat方法中再次调用该函数,对吧?但是那个for循环会发生什么?函数调用concat方法是否强制循环退出?
这是一个JSFiddle,我每个都newArr登录到控制台,但我甚至无法遵循它.该数组的构建方式如下:
[1, 2]
[4]
[3, 4]
[1, 2, 3, 4] //Final
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个具有多个属性的对象,每个属性都有一个字符串值.当我尝试连接每个属性的值时,它返回NaN.
var urlProps = {
searchTerm: "searchSTUFF",
baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
tailURL: "&rawcontinue=&callback=?",
finalURL: this.baseURL + this.searchTerm + this.tailURL
}
console.log(urlProps.finalURL);
//NaN
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么,或者这样做的正确方法是什么?
我正在尝试学习 jQuery,并正在修改一个小项目来尝试通过实践来学习,但我一直专注于如何为一个 div 的移动设置动画到另一个 div。
澄清一下,当我单击一个 div 时,我希望将另一个 div 移动到我单击的 div。我正在使用appendTo()将他移动到那里,但正如你所知,移动是即时的,我想为移动设置动画。
这是当前正在发生的事情的小提琴:https ://jsfiddle.net/Chirpizard/jyatn89r/
只需单击蓝点即可查看发生了什么。
这是JS:
$(document).ready(function () {
$(".node").click(function() {
if ($(this).hasClass('unlocked')) {
$("#main-char").appendTo(this).animate( {
top: "+=50"
}, 1000, function() {
});
$(".node").removeClass("activeNode"); //Removes all instances of activeNode
$(this).addClass('activeNode') //Adds activeNode class to the node clicked on
}
else {
console.log("Sorry, broken");
}
});
});
Run Code Online (Sandbox Code Playgroud)
我检查了其他几篇文章,但没有找到我正在寻找的确切解决方案。任何有关如何到达红点以缓慢移动到单击的元素的指导将不胜感激!
谢谢
我正在分配一个变量,一个使用setInterval的函数,但我不想让函数运行直到我调用它.但是,该函数仅从赋值语句运行.
sessionClock = setInterval(function() {
console.log("Hi")
}, 1000)
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样的:
sayHi = function() {
console.log("Hi");
}
var sayHiStarter = setInterval(sayHi, 1000);
Run Code Online (Sandbox Code Playgroud)
这两个都启动该功能,并将"Hi"记录到控制台.
为什么它在分配时运行?我能做些什么来解决这个问题?
我有一个在setInterval上运行的JS脚本,脚本进度存储在progressPercentage变量中.我正在使用此百分比值来修改具有bgcolor的子div的宽度.随着它变得越来越大,它开始填充更多的父div.
使用方形非常简单,但我很难填充圆形(border-radius: 100%).
现在我正在使用2个div,我知道有更好的方法可以做到这一点,但现在这就是它的样子:
<div id="load-bar-frame">
<div id="load-bar"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是CSS:
#load-bar-frame {
height: 200px;
width: 200px;
border-radius: 100%;
padding: 3px;
border: 1px solid #fff;
margin: 20px auto 0 auto;
display: block;
position: absolute;
bottom: 20px;
left: 20px;
}
#load-bar {
border-radius: 100%;
background: #fff;
width: 0%;
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
JS通过增加宽度来填充背景,#load-bar因为它的宽度增加它填满了#load-bar-framediv.
问题是,在子div的宽度将从0开始,因此它是一个真正的串环并且不适合父div.
所以我正在寻找一种更好的填充bgcolor的方法.
我正在尝试写一些检查字母不等于元音的东西.我知道我可以用正则表达式做到这一点,但为了更多地了解条件语句,我怎样才能更有效地编写这样的东西呢?
if (myArray[i] !== "a" || myArray[i] !=="e" || myArray[i] !=="i" || myArray[i] !=="o" || myArray[i] !=="u") {
console.log(myArray[i] + "");
}
Run Code Online (Sandbox Code Playgroud)
通过更有效率,我的意思是更多的干,而myArray[i] !== "a"不是重复这么多.