jquery - 错误循环遍历循环并在满足条件时中断

标签 jquery backbone.js coffeescript break

我正在使用 jQuery 循环遍历数组并将每个值与模型的用户 ID 进行比较。如果找到匹配项,我只会显示特定文本。

$.each current_user.get('following_ids'), (i, e) =>
  console.log(@model.get('user')._id == e)
  if @model.get('user')._id == e
    @is_following = true
    //break from loop if condition is met
    return false
  else
    @is_following = false
    //else continue looping through
    return true

if @is_following
  $(@el).find('.user_info .follow a').text "following"
else
  $(@el).find('.user_info .follow a').text "follow"

但是我的代码不起作用,它总是返回“follow”文本。我在这里做错了什么?

最佳答案

大概current_user.get('following_ids')是某种ID数组。我立即想到两种可能性:

  1. current_user.get('following_ids') 不包含 @model.get('user')._id,因此一切正常。
  2. 您有类型问题。也许 following_ids 是一个字符串数组,_id 是一个数字,反之亦然。

选项2需要更多解释:CoffeeScript的==被转换为JavaScript的===所以1 ==' 1' 在 CoffeeScript 中为 false,但在 JavaScript 中为 true。这确实使 2 成为 1 的隐藏且可能令人惊讶的变体,但它足够特殊,足以成为其自身的情况。

考虑一下您的情况的简化模拟:

$.each ['1','2','3'], (i, e) =>
    if 2 == e
        @is_following = true
        return false
    else
        @is_following = false
        return true
console.log @is_following

你会得到 false 因为 2 == '2'false 是 CoffeeScript: http://jsfiddle.net/ambiguous/YsstH/

但是,如果我们修复类型:

$.each [1,2,3], (i, e) =>
    # Only the array changes...
console.log @is_following

然后我们得到了我们期望的true结果:http://jsfiddle.net/ambiguous/CxHXu/

<小时/>

无论如何,由于您使用的是 Backbone,因此您有下划线,因此您可以只使用 _.any :

@is_following = _(current_user.get('following_ids')).any (id) => @model.get('user')._id == id

或更好:

want_this_id  = @model.get('user')._id
@is_following = _(current_user.get('following_ids')).any (id) -> want_this_id == id

不过,您仍然需要解决类型问题。

关于jquery - 错误循环遍历循环并在满足条件时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875964/

相关文章:

javascript - 以编程方式在 Facebox 中打开一个 div

javascript - 在转到其他页面之前检查复选框是否已选中

javascript - jQuery 在转换结束时更改 id

javascript - Backbone.js 使用 destroy/delete 发送变量

javascript - Coffeescript array.sort(a,b) 生成失败的 JS

javascript - 替换为不删除元素

Javascript 将对象传递给函数原型(prototype)?

backbone.js - Backbone 1.1.0 View -阅读选项

javascript - 我如何加载其他js脚本并使用mongodb运行它

ruby-on-rails-3.1 - "ReferenceError: $ is not defined"使用带有 Rails 3.1 的 CoffeeScript TextMate 包