【问题标题】:Using jQuery inArray with array of JavaScript Objects使用带有 JavaScript 对象数组的 jQuery inArray
【发布时间】:2009-11-18 20:44:09
【问题描述】:

我正在处理一组 JavaScript 对象:

var IssuesArray = [{"ID" : "1", "Name" : "Issue1"}, 
                   {"ID" : "2", "Name" : "Issue2"}, 
                   {"ID" : "3", "Name" : "Issue3"}];

当我知道对象的 ID 时,我的最终努力是尝试从数组中删除一个对象。我正在尝试使用类似这样的代码:

$.grep(IssuesArray, function(n, i) {
    return i != $.inArray("2", IssuesArray);
});

所以这表明我正在尝试使用 jQuery grep 按索引 (i) 删除一个元素,我正在尝试使用 jQuery inArray 检索该元素。当然,上面的代码是行不通的,因为“2”应该对应于数组中的一个项目,它们都是 JavaScript 对象(一个对象永远不会等于“2”)。我需要类似的东西:

$.inArray(javascriptObject.Name=="2", IssuesArray);

有没有人成功地使用 inArray 来获取 JavaScript 对象的索引,使用该对象中的字段值?任何帮助,将不胜感激。谢谢。

更新/澄清:有几个人对我的问题感到困惑,但我收到的答案仍然有效。我正在使用:

IssuesArray = $.grep(IssuesArray, function(n) {
    return n.ID != "2";
});

我想我想得太深了,当时解决方案真的很简单。我只是想从数组中删除一个 JavaScript 对象,只要我知道该对象中特定属性的值。上述解决方案使用 jQuery 的 grep 从数组中返回所有内容,除了 ID == "2" 的任何对象。像往常一样,感谢您的快速回答。几个答案是很好的解决方案,并且可以使用(例如使用“拼接”),但这个解决方案似乎是最短最直接的。再次感谢。

【问题讨论】:

  • 我不知道你想要达到什么目的......
  • 根本不知道 .grep 方法(顺便说一句,为什么它被称为 grep?)——这对于较小的数组来说很棒;但是,它会复制数组,因此对于更大的数据集,从原始数组中删除元素可能会更好,但这在很大程度上取决于您要归档的内容:)

标签: javascript jquery arrays


【解决方案1】:

n 是您的列表项,所以这样的事情应该可以完成:

$.grep(issuesArray, function(n) { return n.ID != "2"; })

【讨论】:

  • 这似乎做了我需要做的事情。谢谢!
  • 也可以使用严格比较,!== 而不是 !=
【解决方案2】:

不确定我是否正确理解了您的问题,但我会这样做:

$.each(IssuesArray, function(i, item){
  if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1);
});

【讨论】:

    【解决方案3】:
    var spliceID = function(id, arr) {
        $(arr).each(function(i, el) {
            if (el.ID == id) {
                arr.splice(i,1);
                return false;
            }
        });
        return arr;
    }
    
    console.log(spliceID('2', IssuesArray));
    

    【讨论】:

      【解决方案4】:

      不使用 jQuery 或其他框架:

      var newArray = [];
      var i=0, len=IssuesArray.length;
      var bad_id = "2"; // or whatever
      while(i<len) {
        if(IssuesArray[i].ID !== bad_id) {
          newArray.push(IssuesArray[i++]);
        }
      }
      

      【讨论】:

        【解决方案5】:

        简化??

        var IssuesArray = {
          1: "Issue1",
          2: "Issue2", 
          3: "Issue3"
        };
        var issue2 = IssuesArray[2];
        

        为什么要一个哈希列表呢?

        【讨论】:

        • 不想在我的问题中涉及太多细节,但我在“问题”中有更多数据,而不仅仅是名称和 ID。总共有 5 个字段,所以一个哈希是不够的。不过感谢您的想法。
        猜你喜欢
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 2013-12-08
        • 2017-06-28
        • 2017-06-24
        相关资源
        最近更新 更多