私は学習目的のための小さなフレームワークを作ろうとしているだけで、Array.prototype.forEach
オブジェクトで使用できるようにしたいのですが、これは私が今持っているものです。
var data = { test: 'test' };
Array.prototype.forEach(data, function(key value) {
console.log(key);
});
しかし、エラーが発生しました。理由はわかると思いますが、わかりません:)
私は学習目的のための小さなフレームワークを作ろうとしているだけで、Array.prototype.forEach
オブジェクトで使用できるようにしたいのですが、これは私が今持っているものです。
var data = { test: 'test' };
Array.prototype.forEach(data, function(key value) {
console.log(key);
});
しかし、エラーが発生しました。理由はわかると思いますが、わかりません:)
オブジェクトは配列ではなく、配列プロトタイプにアクセスできません。プロパティをループするだけです。
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;
},
次のようにします。
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)
})
によってオブジェクトのキーを反復処理し、 によってfor(key in data)
各値を取得できますdata[key]
。いえ
for(key in object) {
console.log(key, data[key]);
}
これを試して:
obj = {}; // Some object
obj.forEach = function(fn) {
Object.keys(this).forEach((k)=> {
if (typeof(this[k]) != 'function')
fn(this[k]);})
};