Javascript JSFiddle&;回调
作为练习的一部分,我正在编写下划线函数并在JSFIDLE中测试它们。每次我传递回调函数时,都会得到“未定义” 我的代码如下:Javascript JSFiddle&;回调,javascript,underscore.js,jsfiddle,Javascript,Underscore.js,Jsfiddle,作为练习的一部分,我正在编写下划线函数并在JSFIDLE中测试它们。每次我传递回调函数时,都会得到“未定义” 我的代码如下: each = function(collection, iterator) { if(Array.isArray(collection)){ for (var i = 0; i < collection.length; i++) { iterator(collection[i], i, collection); } } else { for(va
each = function(collection, iterator) {
if(Array.isArray(collection)){
for (var i = 0; i < collection.length; i++) {
iterator(collection[i], i, collection);
}
} else {
for(var key in collection) {
iterator(collection[key], key, collection);
}
}
};
var numbers = [1,2,3,4];
var result = each(numbers, function(num) {
return num * 2;
});
console.log(result);
// undefined
each=函数(集合、迭代器){
if(数组.isArray(集合)){
对于(变量i=0;i
知道我做错了什么以及为什么它没有在JSFIDLE上输出吗?您没有聚合操作的结果,这就是为什么结果不是结果 下面是如何为阵列解决这一问题的快速尝试
each = function(collection, iterator) {
var arr = [];
if(Array.isArray(collection)){
for (var i = 0; i < collection.length; i++) {
arr.push( iterator(collection[i], i, collection) );
}
return arr;
} else {
for(var key in collection) {
iterator(collection[key], key, collection);
}
}
};
var numbers = [1,2,3,4];
var result = each(numbers, function(num) {
return num * 2;
});
console.log(result);
each=函数(集合、迭代器){
var-arr=[];
if(数组.isArray(集合)){
对于(变量i=0;i
你没有做错什么。您的
每个
函数都没有返回任何内容。这很好,因为每个函数都不一定要返回任何内容。您可能会考虑使用map
或reduce
函数编译调用集合中每个项的回调的结果,然后返回编译结果
传递给每个
函数的回调通常不会返回任何内容。想象一个每个
就像它只是一个正常for
循环的语法糖for
循环不返回任何内容(显然是…),它们只对集合中的项和包含范围中声明的变量执行一般操作
也就是说,如果您想要模拟下划线(或任何好的库),您将希望返回集合以启用链接。从:
[each]迭代元素列表,依次生成一个iteratee函数……返回链接列表
这只是一个很好的实践,以避免打扰可能使用您的库并且习惯于能够在JavaScript中链接所有内容的开发人员
所以你需要做的就是
return collection;
在你的
每一个功能结束时,你都很好。干杯。each()
本身不会返回任何内容<代码>返回数*2如果没有each()
的配合,code>不会自动跳转到var result
。您的each函数不会返回任何值,只是出于好奇,因为2天前在JSFIDLE上运行代码是有效的。此外,该练习是车底练习的一部分,测试在没有返回声明的情况下在本地通过。有什么想法吗?谢谢@bowhart,非常好的解释!我好像把我的地图和每一张都弄混了。现在一切都清楚了!