了解函数的返回值

时间:2016-11-25 22:46:03

标签: javascript function

所以我在freecodecamp上做了一些挑战,我被困在一个说: "创建一个查看对象数组(第一个参数)的函数,并返回具有匹配的属性和值对(第二个参数)的所有对象的数组。"所以我找到了答案,并在下一个代码中找到了:

function whatIsInAName(collection, source) {
  var arr = [];
  var keys = Object.keys(source);
  // Filter array and remove the ones that do not have the keys from source.
  arr = collection.filter(function(obj) {
    return keys.every(function(key) {
      return obj.hasOwnProperty(key) && obj[key] === source[key];
    });
  });

  return arr;
}

我理解它的作用我似乎无法获得的是collection.filter中的返回为什么我们需要这两个:

    return keys.every(function(key) {
      return obj.hasOwnProperty(key) && obj[key] === source[key];

为什么代码不适用于第二个代码。

请有人向我解释一下。

2 个答案:

答案 0 :(得分:1)

此代码:

arr = collection.filter(function(obj) {
    return keys.every(function(key) {
      return obj.hasOwnProperty(key) && obj[key] === source[key];
    });

首先,(这是检查集合与元素匹配与否的主要脚本)

keys.every(function(key) {
          return obj.hasOwnProperty(key) && obj[key] === source[key];

它将根据obj.hasOwnProperty(key) && obj[key] === source[key];条件返回 true / false 。它检查来自source的每个密钥。如果它发现只有one key与条件不匹配,它将打破循环并返回false否则(通过所有测试[来自的所有键和值相同]集合的元素])返回true。

然后

arr = collection.filter(function(obj) { return true // false

如果它返回true,则来自集合的元素obj将传递给arr,否则filtered / skipped

答案 1 :(得分:0)

collection.filter正在调用Array.prototype.filter。它用于从不满足特定条件的数组中删除元素。作为参数传递的函数用于确定元素是否满足该条件。返回值false表示应该从数组中删除元素,而true表示该元素应该保留在数组中。

如果你没有给函数一个return语句,它将为数组的所有元素返回undefined,这是一个假值。

在ES6中,您可以使用arrow functions而不需要您撰写return

function whatIsInAName(collection, source) {
  var keys = Object.keys(source);
  return collection.filter(obj =>
    keys.every(key =>
      obj.hasOwnProperty(key) && obj[key] === source[key];
    )
  );
}