我不理解的是函数及其参数fruit
,因为它没有传递任何东西。
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
}
console.log(inventory.find(findCherries));
答案 0 :(得分:2)
...因为它没有传递任何东西。
正在传递某些东西,你只是看不到代码在做什么,这是里面 Array.prototype.find
方法的代码。请记住,这一行:
console.log(inventory.find(findCherries));
...将findCherries
(函数引用)的值传递给find
,它不会调用 {{1} }。 findCherries
为数组中的每个条目执行一次,提供三个参数(find
中只使用其中一个参数)。这些参数中的第一个是该调用的数组条目。
findCherries
的完整polyfill会让人难以理解,所以让我们做类似但更简单的事情,这样你就可以看到这些调用:
Array.prototype.find
实时复制:
// A bit like Array.prototype.find, but **not** the same; much simplified
function fakeFind(callback) {
for (var index = 0; index < this.length; ++index) {
var entry = this[index];
// vvvvvvvvvvvvvvvvvvvvvvvvvvvv---- This is where findCherries is called
if (callback(entry, index, this)) {
return entry;
}
}
return undefined;
}
答案 1 :(得分:0)
如果你扩展函数使它使用匿名函数,那就更有意义了。
如果你看一下下面的代码片段,它可以解释一下......
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
}
//this kind of does the same, apart from the extra anonymous function
//but here you can see this `item` that's getting passed
console.log(inventory.find(
function (item) { return findCherries(item); }
));
//because in the above the anonymous function has the same
//signature, it's made redunant, so we may as well
//call findCherries direct..
console.log(inventory.find(findCherries));
答案 2 :(得分:0)
find()方法返回数组中的值,如果是元素中的元素 数组满足提供的测试功能。否则未定义 回。 Array.prototype.find()
在您的代码段中fruit
是原始数组中的项目,我的值是数组中的项目。findCherries
将比较数组中的每个元素以匹配属性{{ 1}}(这是提供的测试功能)。
您的name
回调将对阵列中的每个值执行。找到匹配项后,将返回结果。