1

私は学習目的のための小さなフレームワークを作ろうとしているだけで、Array.prototype.forEachオブジェクトで使用できるようにしたいのですが、これは私が今持っているものです。

var data = { test: 'test' };

Array.prototype.forEach(data, function(key value) {
    console.log(key);
});

しかし、エラーが発生しました。理由はわかると思いますが、わかりません:)

4

6 に答える 6

5

オブジェクトは配列ではなく、配列プロトタイプにアクセスできません。プロパティをループするだけです。

for(var key in data){
      console.log(key) //or data[key] if you want the values
   }

以下のjQueryコメントに関しては、「各」機能に対して内部的にループを使用しているようです。ソースから:

// args is for internal usage only
each: function( obj, callback, args ) {
    var value,
        i = 0,
        length = obj.length,
        isArray = isArraylike( obj );

    if ( args ) {
        if ( isArray ) {
            for ( ; i < length; i++ ) {
                value = callback.apply( obj[ i ], args );

                if ( value === false ) {
                    break;
                }
            }
        } else {
            for ( i in obj ) {
                value = callback.apply( obj[ i ], args );

                if ( value === false ) {
                    break;
                }
            }
        }

    // A special, fast, case for the most common use of each
    } else {
        if ( isArray ) {
            for ( ; i < length; i++ ) {
                value = callback.call( obj[ i ], i, obj[ i ] );

                if ( value === false ) {
                    break;
                }
            }
        } else {
            for ( i in obj ) {
                value = callback.call( obj[ i ], i, obj[ i ] );

                if ( value === false ) {
                    break;
                }
            }
        }
    }

    return obj;
},
于 2013-05-13T15:59:30.997 に答える
2

次のようにします。

Object.keys(data).forEach(function(key) {
    console.log(data[key])
});

Object.keys()必要に応じて、古いブラウザをシムできます。


必要に応じて、この操作のラッパー関数を作成できます。

function objEach(obj, fn) {
    Object.keys(obj).forEach(function(key) {
        fn(obj[key], key)
    })
    // or use for-in
}

次に、次のように使用します。

objEach(data, function(val, key) {
    console.log(key, val)
})
于 2013-05-13T16:10:55.243 に答える
0

によってオブジェクトのキーを反復処理し、 によってfor(key in data)各値を取得できますdata[key]。いえ

for(key in object) {
    console.log(key, data[key]);
}
于 2013-05-13T16:00:58.190 に答える
0

これを試して:

obj = {}; // Some object
obj.forEach = function(fn) {
    Object.keys(this).forEach((k)=> {
        if (typeof(this[k]) != 'function') 
            fn(this[k]);})
        };
于 2017-05-04T03:06:47.573 に答える