我有一个学术任务,要求我的函数迭代一个集合。我基本上是在学习forEach的工作方式,所以我无法使用它。集合可以是数组或对象。我知道如何分别做两个,但是如何使现有的功能处理传递给它的任何集合? 到目前为止,这就是我对数组部分所拥有的:
function(myCollection, myIterFunc){
for (var i = 0; i< myCollection.length; i++){
myIterFunc(myCollection[i], i, myCollection);
}
};
答案 0 :(得分:1)
我会使用isArray方法。
function(myCollection, myIterFunc){
if (Array.isArray(myCollection)){
for (var i = 0; i< myCollection.length; i++){
myIterFunc(myCollection[i], i, myCollection);
}
} else {
for (var key in myCollection){
if (myCollection.hasOwnProperty(key)){
myIterFunc(myCollection[key], key, myCollection);
}
}
}
};
答案 1 :(得分:0)
也许是这样的:
var str = 'one, two, three';
var ob = {
item_1: 'one',
item_2: 'two',
item_3: 'three'
};
var ary = ['one', 'two', 'three'];
var myRuggedLittleIterator = function(col){
if(typeof col !== 'object'){return;}
var colKeys = Object.keys(col);
for (var i = 0; i < colKeys.length; i++){
console.log(col[colKeys[i]]);
}
};
myRuggedLittleIterator(str);
myRuggedLittleIterator(ob);
myRuggedLittleIterator(ary);
答案 2 :(得分:-1)
然后通过查看jQuery's source code for it's each
method进行一些学术研究(不要剽窃,只需要一些灵感)
在你的方法中,你总是要检查你是否在一个对象或数组上进行迭代,因为迭代这些结构的方法是不同的。