如果符合条件,有没有办法在Object.each()
内跳转当前的迭代?
我可以使用:
Object.each(myObject, function(item, key){
if(key != 'someString'){
//do everything
}
});
但我想要像
这样的东西Object.each(myObject, function(item, key){
if(key == 'someString') continue;
});
答案 0 :(得分:4)
您可以为对象添加与Arrays相同的内容。
P.S。我希望你的问题是break
,对吗?不是continue
?
因为要continue
所有你需要做的就是从你的Object.each的回调fn中提前返回...
Object.each(myObject, function(item, key){
if(key == 'someString') return;
// code here will run only if key is somethingelse.
});
无论如何,实现Object.every和Object.some(不在原型上,只在Object上托管)
(function(){
var hasOwnProperty = Object.hasOwnProperty;
Object.extend({
some: function(obj, cb, bind){
for (var k in obj){
if (hasOwnProperty.call(obj, k)){
if (cb.call(bind, obj[k], k, obj)) break;
}
}
},
every: function(obj, cb, bind){
for (var k in obj){
if (hasOwnProperty.call(obj, k)){
if (!cb.call(bind, obj[k], k, obj)) break;
}
}
}
});
}());
以下是一些用途:
var foo = {
one: 1,
two: 2,
bar: 'haha',
three: 3
};
// loop keys until the key is bar then stop.
Object.some(foo, function(value, key){
console.log(key, value);
return key === 'bar';
});
// loop keys until a non-number is encountered, then stop
Object.every(foo, function(value, key){
console.log(key, value);
return typeof value === 'number';
});