each()
& map()
这应该与原生forEach
或下划线或lodash _.each
方法一样。它应该采用数组或对象。我是否听说过是否使用Array.isArray
或instanceof
确定传入的集合是对象还是数组,我目前的理解是使用{{1}事情是最好的方式。也许我完全错了。我已经在这几个小时里不知所措,并且非常感谢任何建议或意见。
我的功能似乎没问题,但它永远不会对我给它的任何数组或对象进行任何更改。如果它是一个对象,我想改变值,而不是属性名称。对不起,如果我的评论令人烦恼多余。请帮忙。
object.prototype.toString
这是一些愚蠢的数组和对象。对于每一个,我期待收集到位。我错了吗?
TgEach( collection, callback )

对于回调函数,让我们说我想添加3.所以为此...
var tgObj = {one: 1, two: 2, three: 3, four: 4, five: 5 };
var tgArr = [ 1,2,3,4,5];
// I'm invoking it like
TgEach( tgObj, function(n){ return n + 3 } );
TgEach( tgArr, function(n){ return n + 3 } );
// I give it a collection and a callback - adding three to each item.
// I'm expecting `tgArr` to now equal `[4, 5, 6, 7, 8]` and
// `tgObj` to now equal `{ one: 4, two: 5, three: 6, four: 7, five: 8 };`
// But nothing ever happens...
// Here's my function...
var TgEach = function( collection, callback ){
var dataStructure = 0;
(function ObjectOrArray( collection ){
if ( {}.toString.call( collection ) === "[object Array]" ){
dataStructure += 1;
}
else if ( {}.toString.call( collection ) === "[object Object]" ){
dataStructure += 2;
}
})();
if ( dataStructure === 1 ){
for ( var i = 0; i < collection.length; i++ ){
callback( collection[i] );
}
else ( dataStructure === 2 ){
for ( var key in collection ){
callback( collection[key] );
}
}
};
我希望TgEach( tgObj, function(n){ return n + 3 } );
TgEach( tgArr, function(n){ return n + 3 } );
现在等于tgArr
和
[4, 5, 6, 7, 8]
现在平等
tgObj
但什么都没发生......
{ one: 4, two: 5, three: 6, four: 7, five: 8 };
地图依赖于每一个,所以这让我全都压力
我的地图看起来像这样..
TgMap( collection, callback )
我到底做错了什么?