Javascript 理解函数的返回值
所以我在freecodecamp上做了一些挑战,我被一个说: “生成一个函数,该函数遍历对象数组(第一个参数),并返回具有匹配属性和值对的所有对象的数组(第二个参数)。”因此,我查找了答案并获得了下一个代码: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
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];