在Object.each()中跳转迭代

时间:2013-12-30 10:51:07

标签: mootools

如果符合条件,有没有办法在Object.each()内跳转当前的迭代?

我可以使用:

Object.each(myObject, function(item, key){
    if(key != 'someString'){
        //do everything
    }
});

但我想要像

这样的东西
Object.each(myObject, function(item, key){
    if(key == 'someString') continue;
});

1 个答案:

答案 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';
});