所以我在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];


为什么代码不能仅与第二个代码一起使用。

有人可以向我解释一下。

最佳答案

此代码:

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


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

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

关于javascript - 了解函数的返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40813099/

10-12 00:31
查看更多