我有这个练习已经得到答案,但在听完解释后,仍然不明白。这是练习:
"写一个函数isUniform(),它接受一个数组作为参数 如果数组中的所有元素都相同,则返回true"
这是解决方案
function isUniform(numArr) {
var first = numArr[0];
for (var i = 1; i < numArr.length; i++) {
if (numArr[i] !== first) {
return false;
}
}
return true;
}
我得到了它几乎是正确的,但我做了另一个声明与&#34;返回true&#34;它没有用。为什么它适用于&#34;返回true&#34;在for循环之外? (编辑)这是我第一次这样做:
function isUniform(numArr) {
var first = numArr[0];
for (var i = 1; i < numArr.length; i++) {
if (numArr[i] !== first) {
return false;
}
else {
return true;
}
}
}
答案 0 :(得分:1)
如果你在循环之外返回true,那么它会检查循环中的每个元素,直到匹配if
测试或它到达循环的末尾。
如果你在循环中返回true,那么它将始终为第一个元素命中return
语句,然后停止循环。
答案 1 :(得分:1)
我得到了它几乎是正确的,但我用&#34;返回做了另一个声明 真&#34;它没有工作
下面的解决方案在某些情况下会返回错误的结果,因为它所做的就是找到数组中第一个等于 first
变量并返回true的元素,即使它没有搜索整个阵列。
function isUniform(numArr) {
var first = numArr[0];
for (var i = 1; i < numArr.length; i++) {
if (numArr[i] !== first) {
return false;
}
else {
return true;
}
}
}
我有这个练习已经得到答案,但在听完之后 解释,仍然不明白。
让我们假设这是你的数组:
[10,10,13,10,10]
我们假设这是变量first
:
first = 10;
如果变量if statement
不等于当前索引for loop
(first ( 10 )
处的元素,则i
内的nth
基本上会显示return false
数组中的数字)然后first
。这是有道理的,因为如果此时变量index
与指定index 2 (number 13)
处的元素(例如return
)不同,那么就没有必要继续进行。因此,它会if (numArr[i] !== first) {
return false;
}
为假。
[10,10,10,10,10]
现在让我们假设数组是:
first
我们假设这是变量first = 10;
:
first
现在变量element
将与数组中的每个10 is equal to 10
进行比较,它表示&#34; 10不等于当前元素&#34;。在这种情况下,因为return
而错误。这将向下传播数组,控件永远不会传递到if块内。最终,控制向下传递到if (numArr[i] !== first) {
return false;
}
真实语句。
guard let landBackground = childNode(withName: "ground")
as? SKTileMapNode else {
fatalError("Background node not loaded")
}
self.landBackground = landBackground
self.tileSize = landBackground.tileSize
for x in 0...(landBackground.numberOfColumns-1){
for y in 0...(landBackground.numberOfRows-1){
let tile = landBackground.tileDefinition(atColumn: x, row: y)
if(tile != nil){
let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
let tileNode = SKShapeNode(rect: rect)
tileNode.position = self.landBackground.centerOfTile(atColumn: x, row: y)
tileNode.position.x -= (tileSize.width * 0.5)
tileNode.position.y -= (tileSize.height * 0.5)
tileNode.physicsBody = SKPhysicsBody(rectangleOf: tileSize, center: tileNode.position)
tileNode.physicsBody?.isDynamic = false
tileNode.physicsBody?.collisionBitMask = playerCategory|groundCategory
//tileNode.physicsBody?.contactTestBitMask = playerCategory
tileNode.physicsBody?.categoryBitMask = groundCategory
landBackground.addChild(tileNode)
}
}
}
答案 2 :(得分:0)
它有效,因为它是函数中的最终语句。基本上,如果for循环中的条件不会被触发,你的函数将返回true
答案 3 :(得分:0)
让我们说你有一台破损的打印机,它偶尔会打印出打印输出。现在你打印了20份,想知道每篇论文是否合适。那么现在你必须迭代地比较每个副本,直到找到一个不匹配的副本(并知道它是时候得到一台新的打印机?)。或者你已经走过了堆栈并且知道每个副本都没问题(而且你浪费了时间)。