jQuery $ .inArray()总是返回带有对象数组的-1

时间:2012-09-13 13:44:59

标签: javascript jquery

我有一个对象数组,它包含columnNames的键值对。

当我检查特定列名是否存在时,alwayz返回-1

以下是一个示例http://jsfiddle.net/trLkt/6/,帮助将适用

2 个答案:

答案 0 :(得分:3)

您正在columnModel数组中搜索字符串值,但您正在其中存储对象columnModel.push({'colName': $(this).text()});)。 $.inArray()无法自行决定与每个数组元素的colName属性进行比较,它只是将您搜索的值与每个数组元素进行比较。

答案 1 :(得分:2)

你可以做两件事:

使用strings(由@lanzz建议)将objects添加到数组而不是.push,然后$.inArray将按预期工作。

或者,如果您确实需要在数组中存储对象(例如,如果您需要在每个对象中包含多个属性),则需要迭代每个对象并查看colName是否已存在:< / p>

    var colExists = false;
    var text = $(this).text();
    $.each(columnModel, function(k, v) {
      if(text == v['colName']) {
        colExists = true;
      }
    });

然后将支票从if(colExists === -1)更改为if(!colExists)

示例

$(function () {
  $('#ddlMain').change(function (event) {
    $('option:selected', $(this)).each(function () {

      var colExists = false;
      var text = $(this).text();

      $.each(columnModel, function(k, v) {
        if(text == v['colName']) {
          colExists = true;
        }
      });

      if(!colExists) {
        columnModel.push({'colName': $(this).text()});
        alert($(this).text() + ' added to columnModel');
      }

    });
  });
});