javascript - 误解 JavaScript 执行流程

标签 javascript backbone.js backbone.js-collections

我从 Backbone 开始,正在编写一个手机销售应用程序。但我的疑问是关于 javascript 执行流程的。

情况是我有一个自定义方法来拒绝我的购物车集合中的重复项,这些方法是这样的:

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                _.each(this.models, function( element, index, list ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        return true; 
                    }
                });
                return false;
            }
        });

该方法检测重复项并尝试返回 true,但该行不是最后一行,因为执行的最后一条语句是“return false”。此时我意识到我对这个 javascript 执行流程有误解。

也许你们中的一个人可以用你的知识启发我

谢谢

最佳答案

您将从传递给 _.each 的函数返回 true。这与您的 contains 函数不同。这是让它发挥作用的方法:

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                var doesContain = false;
                _.each(this.models, function( element, index, list ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        doesContain = true; 
                    }
                });
                return doesContain;
            }
        });

但是,更好的方法(假设是 lodash 或下划线)是使用 _.any

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                return _.any(this.models, function( element ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        return true; 
                    }
                });
            }
        });

关于javascript - 误解 JavaScript 执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342419/

相关文章:

javascript - backbone.js 和不在模型中的状态

backbone.js - 低耦合 : add a model to a collection of a different view

javascript - 如何在 fetch() 之后正确对主干 js 集合进行排序

javascript - 通过 JavaScript 获取我的网站中当前 Windows 用户的用户 ID

javascript - 检测是否输入了字符或数字

javascript - Webpack react 错误

javascript - Backbone 验证未执行

javascript - Backbone 路由器导航和 anchor href

javascript - 无法交换模型集合属性?

javascript - 使用数组制作d3.map