在一篇关于yuiblog 的文章中,Douglas Crockford说该for in语句将迭代一个对象的方法.为什么以下代码不会产生["a","b","c","d","toString"]?是不是.toString()和my_obj的其他方法成员?
Object.prototype.toString = function(){return 'abc'}
Object.prototype.d = 4;
my_obj = {
'a':1,
'b':2,
'c':3
}
a = []
for (var key in my_obj) {
a.push(key)
}
console.log(a) // prints ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud) 当正常使用for-in-loop时,计数器(在这种情况下number)在每次迭代中都是一个常量:
for number in 1...10 {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这意味着我无法改变number循环:
for number in 1...10 {
if number == 5 {
++number
}
}
// doesn't compile, since the prefix operator '++' can't be performed on the constant 'number'
Run Code Online (Sandbox Code Playgroud)
有没有办法声明number为变量,而不是在循环之前声明它,或使用正常的for循环(具有初始化,条件和增量)?
我试图找出如何将一个迭代器添加到javascript类,以便该类可以在for ... in循环中使用.遵循Mozilla的指示不会产生他们声称的结果. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators 给出示例的Jsfiddle:http://jsfiddle.net/KQayW/
function Range(low, high){
this.low = low;
this.high = high;
this.current = low;
this.next = function() {
if (this.current > this.range.high)
throw StopIteration;
else
return this.current++;
}
}
function RangeIterator(range){
this.range = range;
this.current = this.range.low;
}
RangeIterator.prototype.next = function(){
if (this.current > this.range.high)
throw StopIteration;
else
return this.current++;
};
Range.prototype.__iterator__ = function(){
return new RangeIterator(this);
};
var range = new Range(3, 5);
for (var i in range)
document.getElementById("test").innerHTML = i+"</br>"; // prints …Run Code Online (Sandbox Code Playgroud) 我有一个带有可选成员的类:
class A {
var i: Int? = nil
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个类型的对象数组A.数组中的某些对象具有值i,而其他对象则没有.
我想迭代数组中具有值的对象,i同时解包可选项.我没有找到同时做两件事的方法(我甚至不知道是否可能),迫使我if let在循环中编写一个构造.
例如 :
// a1, a2 have a value for i
let arr: [A] = [a1, a2, a3]
for obj in arr where obj.i != nil {
// I want to avoid if let, or force unwrapping here
if let unwrapped = obj.i {
print(i)
}
// let unwrapped = obj.i! ...
}
Run Code Online (Sandbox Code Playgroud)
在Swift中有可能吗?
有没有更整洁或更好的方法来在 Swift 中编写下面的嵌套 for...in 循环?或者是否使用 for... 以正确的方式填充我的卡片?
for cardNumber in 1...3 {
for cardSymbolIdentifier in 1...3 {
for cardColorIdentifier in 1...3 {
for cardShadingIdentifier in 1...3 {
let card = Card(cardNumber: cardNumber, cardSymbolIdentifier: cardSymbolIdentifier, cardColorIdentifier: cardColorIdentifier, cardShadingIdentifier: cardShadingIdentifier)
deckOfCards.append(card)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它确实可以完成这项工作,但我在文档中找不到有关编写多个嵌套循环的任何内容。
预先非常感谢,安迪
在javascript中for..in和each..in语句有什么区别?是否存在我不知道的细微差别,或者它是否相同,每个浏览器都有不同的名称?
一旦你得到你想要的东西,你将如何停止快速枚举.
在for循环中,我知道你只需将计数器数设置为千分之一.例:
for (int i=0;i<10;i++){
if (random requirement){
random code
i=1000;
}
}
Run Code Online (Sandbox Code Playgroud)
所以没有将快速枚举转换为正向循环类型的东西(通过比较我[array count]如何在过程中停止快速枚举?
在哪种情况下使用
for (var i = 0; i < array.length; i++)
Run Code Online (Sandbox Code Playgroud)
与使用不同
for (var i in array)
Run Code Online (Sandbox Code Playgroud)
在JavaScript?
根据我的研究,for..in循环中键的顺序应该是未定义/不可靠的 - 但是,如果不受干扰,应该按插入顺序 - 但它不是:
我从数据库中获取此数据对象,按名称排序:
var travel = {
'2': { name: 'bus', price: 10 },
'3': { name: 'foot', price: 0 },
'1': { name: 'taxi', price: 100 }
}
for (way in travel) console.log( travel[way].name ) // => taxi, bus, foot
Run Code Online (Sandbox Code Playgroud)
密钥以数字方式排序(在Chrome,Firefox和Edge中).为什么?
并且(因为我错了)我怎么能按顺序遍历它们.name?
我正在尝试使用循环对数组进行迭代for .. in ..。我的问题与在循环体内更改集合的情况有关。
似乎迭代是安全的,即使列表在此期间缩小。所述for迭代变量依次取的值(索引和)那些已经在循环的开始的数组中的元素,尽管在流所做的更改。例子:
var slist = [ "AA", "BC", "DE", "FG" ]
for (i, st) in slist.enumerated() { // for st in slist gives a similar result
print ("Index \(i): \(st)")
if st == "AA" { // at one iteration change completely the list
print (" --> check 0: \(slist[0]), and 2: \(slist[2])")
slist.append ("KLM")
slist.insert(st+"XX", at:0) // shift the elements in the array
slist[2]="bc" // replace some elements to come
print (" --> …Run Code Online (Sandbox Code Playgroud) for-in-loop ×10
javascript ×5
swift ×4
for-loop ×2
collections ×1
constants ×1
declaration ×1
enumeration ×1
foreach ×1
iteration ×1
iterator ×1
loops ×1
objective-c ×1
optional ×1
sorting ×1
variables ×1