【问题标题】:jQuery: why doesn't jQuery.inArray() work?jQuery:为什么 jQuery.inArray() 不起作用?
【发布时间】:2011-09-26 14:49:02
【问题描述】:

如图所示,我只是在一个数组上做 inArray,寻找一个节点。并且 $previously_selected_node 和 $shapes 中索引 37 处的项目是同一个对象......所以......为什么它不起作用?

编辑: 在其中一个回答者发布了他的答案后,我找到了另一种搜索方式:

var result = -1;
jQuery.each(shapes, function(key, value){
    if (value.id == shape.id){
        result = key;
    }
});
return result;

显然,我的部分问题是我无法在循环中间返回。 (我在找到匹配项时立即返回,这导致了一些问题。)

【问题讨论】:

  • $shapeslength 吗?
  • $shapes.length 是未定义的......所以......那么它实际上不是一个数组,即使我像 $shapes[id] = val;那么...那我该如何搜索呢?
  • 通常,当问题的形式是“为什么<insert name of popular library function> 不起作用?”来吧-它被错误地使用了。 $shapes可能不是数组,对象比较也容易出问题。
  • 那么,我该如何搜索这个对象呢?
  • @TheLindyHop,使用jQuery.each(),但是,请注意如何比较元素。

标签: javascript jquery arrays


【解决方案1】:

您的对象不是数组。
$.inArray 仅适用于具有length 和一组名为0长度的属性的类数组对象 - 1.

您需要手动搜索非数组。
例如,您可以使用 for / in 循环来遍历所有实际存在的属性,并查看它们是否与您的对象匹配:

for (var key in $shapes) {
    if ($shapes[key] === yourObject) {
        //Match!
    }
}

【讨论】:

  • 怎么样?我试过 .each,for 循环......也不确定这个对象是什么。
  • 很好,我找到了类似的解决方案,添加到 OP
【解决方案2】:

你做错了。其实是$.inArray(value, array)

正如其他人已经说过的:inArray 用于数组,而不是对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2013-11-18
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多