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