Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解函数的返回值_Javascript_Function - Fatal编程技术网

Javascript 理解函数的返回值

Javascript 理解函数的返回值,javascript,function,Javascript,Function,所以我在freecodecamp上做了一些挑战,我被一个说: “生成一个函数,该函数遍历对象数组(第一个参数),并返回具有匹配属性和值对的所有对象的数组(第二个参数)。”因此,我查找了答案并获得了下一个代码: function whatIsInAName(collection, source) { var arr = []; var keys = Object.keys(source); // Filter array and remove the ones that do not

所以我在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;
}
我明白它的作用,但我似乎无法得到的是收藏中的退货。过滤器为什么我们需要这两个:

    return keys.every(function(key) {
      return obj.hasOwnProperty(key) && obj[key] === source[key];
为什么代码不能只使用第二个


有人能给我解释一下吗。

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

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

在ES6中,您可以使用不需要您编写
返回的

function whatIsInAName(collection, source) {
  var keys = Object.keys(source);
  return collection.filter(obj =>
    keys.every(key =>
      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集合的元素是否与源匹配的主脚本)

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

然后

arr=collection.filter(函数(obj){
返回true//false


如果返回
true
,则集合中的元素obj将被传递到
arr
,否则
过滤/跳过

它可以在没有
hasOwnProperty
的情况下工作,但如果对象的祖先具有属性,则这些属性也将被考虑用于子对象。因为您需要使用
return
返回va来自函数的lue。第一个返回值是从传递给
的函数返回的,每个
返回一次。第二个返回值是从
Whatisiname
返回的。有关该方法的详细信息,请阅读。
keys.every(function(key) {
          return obj.hasOwnProperty(key) && obj[key] === source[key];