返回元素不起作用 - JS

时间:2017-08-07 03:47:38

标签: javascript arrays

我正在创建一个each函数来处理不同类型的回调,例如

  • iterateCollection - w / c只返回/打印数组或对象项

  • returnEvenElements - w / c返回数组元素

  • returnKeyDivisbleBy3 - w / c返回可被3分开的数组元素

  • returnKeyWithArrayValue - w / c返回一个键或属性 具有数组值的对象。

这就是我的意思:



var myArray = [1, 2, 3, 4, 5];

var myObject = {
  num1: 1,
  num2: 2,
  num3: [1, 2, 3]
};

function each(collection, callback) {
  if (collection instanceof Array) {
    for (var i = 0, l = collection.length; i < l; i++) {
      callback(collection[i]);
    };
  } else if (collection instanceof Object) {
    for (var prop in collection) {
      callback(collection[prop]);
    };
  }
}

function returnKeyWithArrayValue(collection, prop) {
  return collection[prop] instanceof Array;
}

function returnKeyDivisbleBy3(collection, prop) {
  return collection[prop] % 3;
}

function returnEvenElements(collection) {
  return (typeof collection === 'number') && !(collection % 2);
}

function iterateCollection(collection) {
  return collection;
}

var output1 = each(myArray, returnEvenElements);
console.log(output1);

var output2 = each(myArray, iterateCollection);
console.log(output2);

var output3 = each(myObject, returnKeyWithArrayValue);
console.log(output3);

var output4 = each(myArray, returnKeyDivisbleBy3);
console.log(output4);
&#13;
&#13;
&#13;  

但是在通过上下文后,即使其中一个不起作用,它也不会返回任何内容。我使用了&#39; return&#39;返回元素的关键字,但不要在屏幕上打印或记录它们。

想知道我是否遗漏了什么?请帮忙!

1 个答案:

答案 0 :(得分:1)

问题是您没有将回调设置为任何要返回的值。将回调设置为数组,然后将该值从each函数中返回。

我精简了代码并举了一个例子returnEvenElements。希望这会有所帮助。

我可以通过代码得到[2, 4, 6]

var myArray=[1,2,3,4,5, 6];

function each(collection, callback){
  const returnArray = [];  // <- create array to capture values
  if(collection instanceof Array) {
    for(var i=0, l=collection.length; i<l; i++){
      if (callback(collection[i])){ // <- check if condition is true
        returnArray.push(collection[i]); // <- set values in array
      } 
    };
  }
  return returnArray; <- return the value
}

function returnEvenElements(collection){
  return (typeof collection === 'number') && !(collection % 2);
}

var output1 = each(myArray, returnEvenElements);
console.log(output1);

PS - 尝试查看地图,过滤和减少。您可以使用 -

获取偶数
const evens = myArray.filter(value => (value % 2 === 0));