- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为许多标准的 Underscore.js 函数重写底层代码,以提高我的 JavaScript 技能,但我有点受困于 _.every
/ _.全部
。似乎在库本身中,_.every
/_.all
函数仅使用现有的 _.each
函数编写,但是我被鼓励使用我的 _.reduce
版本编写一个版本(它已经合并了我的 _.each
版本)。我在下面提供了这两个函数的代码。
第一个测试我的 _.every
函数(也见下文)失败是一个使用 _.identity
函数传递所有错误值的测试(只需返回作为参数输入的值)作为迭代器:
Bài kiểm tra:
it('fails for a collection of all-falsy results', function() {
expect(_.every([null, 0, undefined], _.identity)).to.equal(false);
});
关于为什么我的 _.every
函数没有通过上面显示的测试以及其他多项测试(例如,混合真/假值、未定义值等),我有几个问题:
-调用iterator函数时,需要使用iterator.call
vẫniterator.apply
?如果是这样,我应该使用哪个以及如何指定参数?
-在这里使用 _.reduce
thay vì _.each
有什么好处,特别是当 Underscore.js 库不使用 _ 时。减少
?
-为什么return需要调用两次,一次是在调用_.reduce
函数时,一次是在_.reduce
中定义的匿名函数中(我'在构建使用 _.map
函数的函数时,您是否也想知道这一点)?对我来说,我似乎正在返回 _.reduce
函数的结果,它已经返回了一些东西。
_.每:
_.every = function(collection, iterator) {
// TIP: Try re-using reduce() here.
return _.reduce(collection, function(allFound, item) {
return iterator(item) && allFound;
}, ĐÚNG VẬY);
};
_.每个:
_.each = function(collection, iterator) {
// define spec for arrays
if (Array.isArray(collection)) {
for(var i = 0; i < collection.length; i++) {
iterator(collection[i], i, collection);
}
}
// define spec for objects
khác {
for(var key in collection) {
iterator(collection[key], key, collection);
}
}
};
_.减少:
_.reduce = function(collection, iterator, accumulator) {
// add condition to set accumulator if no explicit starting value is given.
if (arguments.length < 3) {
accumulator = collection[0];
}
_.each(collection, function(value) {
accumulator = iterator(accumulator, value);
});
return accumulator;
};
câu trả lời hay nhất
您的测试未通过,因为它没有按预期返回 SAI
(尽管它返回的是错误值)。
_.every = function(collection, iterator) {
return _.reduce(collection, function(allFound, item) {
return iterator(item) && allFound;
}, ĐÚNG VẬY);
};
当您返回 iterator(item) && allFound
时发生的事情是,如果 iterator(item)
是假的(但不是 SAI
),它不会返回SAI
,而是返回iterator(item)
的值。要自己验证这一点,请打开一个 REPL,然后键入 undefined && true
;结果将是 không xác định
,而不是 SAI
。
因此,如果您希望它显式返回 SAI
,而不仅仅是一个假值,您必须将其强制转换为 bool 值。您可以执行 Boolean(truthy_or_falsey_value)
hoặc !!truthy_or_falsey_value
。我通常更喜欢后者,因此请更改您的实现:
_.every = function(collection, iterator) {
return _.reduce(collection, function(allFound, item) {
return !!iterator(item) && allFound;
}, ĐÚNG VẬY);
};
您的其他问题:
When calling the iterator function, do I need to use iterator.call or iterator.apply? If so, which do I use and how do I specify arguments?
这取决于你的目标是什么。 gọi
Và áp dụng
主要用于控制函数体中 cái này
关键字的值。一些 JavaScript 的内置数组方法(如 Array.prototype.map
Và Array.prototype.filter
)接受一个 thisArg
,这就是提供使用 gọi
hoặc áp dụng
执行回调。至于 gọi
Và áp dụng
之间的区别,只是参数的处理方式不同。参见 câu trả lời này了解更多详情。
What benefit is there to using
giảm bớt
here rather than justmỗi
, especially when the Underscore.js library does not usegiảm bớt
?
可能没有,或者很少。可能存在性能差异,但最好的找出方法是分析这两种方法。
Why does return need to be called twice, once when calling the _.reduce function, and once within the anonymous function defined within _.reduce
如果您想要一个函数——任何函数——返回一个值,您必须从该函数内部调用 return。您不能期望从内部函数调用 trở lại
,并期望封闭函数神奇地理解它应该反过来返回被调用函数的值。如果未显式调用 trở lại
,某些语言默认返回函数中最后一个表达式的值,这要么方便,要么令人困惑,具体取决于您的观点。如果您有使用过这种语言(例如 Ruby)的经验,那么所有的 trở lại
语句对您来说可能有点过分。
作为编者注,我觉得 trình lặp lại
是测试函数的一个糟糕的命名选择。它实际上并没有迭代任何东西(它作为参数的函数正在做任何迭代)。更好的名称可能是非常通用的 gọi lại
hoặc cb
。术语"predicate"表示将值映射到 ĐÚNG VẬY
hoặc SAI
的函数,这是我的首选术语。另一个常见的选择是简单地 Bài kiểm tra
,因为毕竟它只是一个对其参数执行二元过滤的函数。
关于javascript - 如何使用 _.reduce(和 _.each)从 Underscore.js 重写 _.every/_.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298493/
我习惯于使用 Apache 服务器,所以当启用 mod_rewrite 时,我可以创建一个 htaccess 文件并使用 URL 重写。 这是我的 htaccess 文件: RewriteEngine
我正在尝试编写一个 mixin 来修改输出的父选择器。这个想法是,在调用 mixin 的情况下,父选择器需要对其进行字符串替换。我有大部分工作,但我不知道如何吞下 & . .test { @inc
我有一个本地目录(上传)和一个 S3 桶设置。 当用户上传图片时,文件存储在本地目录:/uploads/member_id/image_name30 分钟后,系统将文件上传到 S3 使用相同的路径:s
我正在尝试使用以下内容重写代理页面的正文链接: sub_filter http://proxied.page.come http://local.page.com; sub_filte
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 1年前关闭。 Improve this questi
我尝试在我的 JSF 应用程序中使用“重写”(http://ocpsoft.org/rewrite/)。 一切都很好,我已经创建了规则: .addRule(Join.path("/profile/{p
我可以在 AEM 中大致看到两种 URL 重写方法: /etc/map/http(s)下的Sling映射(sling:Mapping) 使用链接重写器/TransformerFactory 重写 UR
我有一个 onclick 函数,我想将 anchor 添加到 href 值。我不想更改 URL,因为我需要该网站仍然可以为没有 javascript 的人/出于 SEO 目的而运行。所以这是我尝试使用
Tôi phải hiển thị loại tiền và giá trong UILabel. Trong một nhãn nhưng sử dụng các cỡ chữ khác nhau. Bây giờ nó trông như thế này: ...Tôi đã làm điều này bằng cách ghi đè drawTextInRect: như thế này: - (void)drawTextIn
Tôi đang cố gắng chuyển hướng bằng cách sử dụng: RewriteRule ^reviews/area/Santa-Barbara%2F$"/reviews/area/santa-barbara" [R=301,NC
Tôi đang sử dụng FOSUserBundle và tôi muốn ghi đè Bộ điều khiển registerAction của anh ấy. Tôi đã đọc tài liệu liên quan đến ghi đè Bộ điều khiển FOSUserBundle nhưng nó không hoạt động.
Tôi đang cố gắng viết lại URL để hoạt động trên trang web của mình. Đây là nội dung .htaccess của tôi: RewriteEngine On RewriteRule ^blog/?$ index.php?page=blog
Ok điều này làm tôi phát điên... Tôi đang cố gắng viết lại url của mình như thế này: Bây giờ: http://www.somedomain.com/Somepage.aspx http://www.somedomain.co
Các phương thức cuối cùng không thể bị ghi đè trong các lớp con. Nhưng với sự kỳ diệu của Scala, điều đó dường như có thể thực hiện được. Hãy xem xét ví dụ sau: trait Test { Final def doIt(s: String): String = s
Tôi có một truy vấn tương tự như sau: Select ser.key From dbo.Enrlmt ser Where ser.wd >= @FromDate AND ser.wd ser.wd
Tôi mới làm quen với nginx và chỉ đang cố gắng làm điều gì đó mà tôi nghĩ là đơn giản. Nếu tôi làm như vậy: - Curl http://localhost:8008/12345678 Tôi muốn trang index.html được trả về. Nhưng tôi phải
Một trong những khách hàng của chúng tôi đã tạo mã QR có khoảng trắng trong url. Làm cách nào để viết chuyển hướng nginx xử lý việc này? Một vài lần thử sử dụng những thứ như "%20" trong chuỗi dường như khiến nginx bị lỗi hoặc lừa đảo
Tôi đang cố gắng ghi đè phương thứcappendChild để tôi có thể kiểm soát các phần tử được tạo động và sửa đổi chúng nếu cần trước khi chèn vào trang. Tôi đã thử mã mẫu này chỉ để xem liệu nó có thể thực hiện được không: var f = Element.prot
Tôi hiện đang sử dụng chức năng sau để xác định xem có nên ẩn danh sách thả xuống khi người dùng nhấp vào đâu đó (trong phản ứng) hay không. Mọi thứ đều hoạt động tốt nhưng khi tôi nhấp vào phần thân thì nó sẽ ghi lại như sau. Tôi đã thử viết lại nó nhiều lần nhưng tôi không thể tìm ra giải pháp cho vấn đề này. Chưa bắt được
Tôi đang phát triển ứng dụng Khởi động/Tích hợp mùa xuân. Tôi sử dụng nhiều tài liệu application.yml (src/main/resources/application.yml) để thiết lập
Tôi là một lập trình viên xuất sắc, rất giỏi!