如何使用相同的函数迭代对象/数组(没有forEach)

时间:2015-05-21 23:36:15

标签: javascript arrays object

我有一个学术任务,要求我的函数迭代一个集合。我基本上是在学习forEach的工作方式,所以我无法使用它。集合可以是数组或对象。我知道如何分别做两个,但是如何使现有的功能处理传递给它的任何集合? 到目前为止,这就是我对数组部分所拥有的:

function(myCollection, myIterFunc){
for (var i = 0; i< myCollection.length; i++){
    myIterFunc(myCollection[i], i, myCollection);
}
};

3 个答案:

答案 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进行一些学术研究(不要剽窃,只需要一些灵感)

在你的方法中,你总是要检查你是否在一个对象或数组上进行迭代,因为迭代这些结构的方法是不同的。