如果值存在,如何签入数组

时间:2017-03-30 22:23:37

标签: javascript backbone.js coffeescript

我正在使用Backbone / Marionette(和Coffeescript)构建一个javascript应用程序,我想检查文本字段中是否包含值。

如果我这样做它不起作用:

questions = $("input[name='questions']").val().split(',')
      if questions.indexOf(1) == -1
        @ui.check.removeClass("green")
      else
        @ui.check.addClass("green")

如果我这样做它可以工作(硬编码数组):

questions = [1]
      if questions.indexOf(1) == -1
        @ui.check.removeClass("green")
      else
        @ui.check.addClass("green")

我做错了什么?

1 个答案:

答案 0 :(得分:1)

来自罚款String.prototype.split manual

  

返回值

     

在给定字符串中出现分隔符的每个点处分割的字符串数组。

和罚款Array.prototype.indexOf manual

  

<强>描述

     

indexOf()使用严格相等(searchElement或三等号运算符使用的相同方法)将===与数组元素进行比较。

所以当你这样说时:

questions = $("input[name='questions']").val().split(',')
if questions.indexOf(1) == -1
  #...

您正在使用严格相等的数字搜索字符串数组(questions)。在JavaScript中,1 === '1'永远不会成为现实(与1 == '1'不同),因此您的搜索将无法找到任何内容。您的硬编码示例有效,因为question是一个数字(而不是字符串)数组。

搜索字符串:

if questions.indexOf('1') == -1

或在搜索前将字符串转换为数字:

questions = $("input[name='questions']").val().split(',').map (s) -> +s
if questions.indexOf(1) == -1

您使用哪种方法取决于1的来源以及您打算使用questions做些什么。