【问题标题】:Javascript: Removing an object from array by checking it's attributeJavascript:通过检查其属性从数组中删除对象
【发布时间】:2012-10-19 07:42:28
【问题描述】:

我可能写了一个相当混乱的标题,但我的问题很简单。

我正在寻找一种从数组中删除项目的有效方法。但是我的数组是已 stringified 的完整对象(我正在 Node.js 上编写我的应用程序,并且我正在使用 JSON.stringify 方法)。所以我的数组是这样的;

"{\"userID\":\"15\",
  \"possibleFollowers\":[
      {\"followerID\":\"201\",\"friends\":716},
      {\"followerID\":\"202\",\"friends\":11887},
      {\"followerID\":\"203\",\"friends\":11887}],
  \"name\":\"John\",
  \"lon\":\"Doe\"}"

我的问题是关于 Javascript(或 Node)。如果我想使用“followerID: 202”从可能的Followers 中删除,我将如何有效地做到这一点?

【问题讨论】:

  • 你想从 JSON 字符串还是 Javascript 对象中删除?
  • @Diode 来自可能的追随者的对象。我的意思是如果它是"possibleFollowers\":[ {\"followerID\":\"201\",\"friends\":716}, {\"followerID\":\"202\",\"friends\":11887}, {\"followerID\":\"203\",\"friends\":11887}], 删除后应该是这样的;
  • "possibleFollowers\":[ {\"followerID\":\"201\",\"friends\":716}, {\"followerID\":\"202\",\"friends\":11887} ]

标签: javascript json performance node.js


【解决方案1】:
var string = "…";

var obj = JSON.parse(string);
obj.possibleFollowers = obj.possibleFollowers.filter(function(fol) {
    return fol.followerID != "202";
});
string = JSON.stringify(obj);

【讨论】:

  • 非常感谢您的回答。我试试看!
  • 但请注意 IE 支持; IE >= 9 .. 对于 node.js,我猜应该没关系 :)
【解决方案2】:
var data = "{\"userID\":\"15\",\"possibleFollowers\":[{\"followerID\":\"201\",\"friends\":716},{\"followerID\":\"202\",\"friends\":11887},{\"followerID\":\"203\",\"friends\":11887}],\"name\":\"John\",\"lon\":\"Doe\"}";

var dataObject = JSON.parse(data);
dataObject.possibleFollowers = dataObject.possibleFollowers.filter(function(follower) {
    return !(follower.followerID == "202");
});
data = JSON.stringify(dataObject);

【讨论】:

  • 非常感谢您的回答。我还没试过,但看起来还不错。不过我在想,你的方法和井提示的splice方法在效率方面有很大的不同吗?
  • 我打算评论在按索引循环遍历数组时修改数组的危险,然后答案改为使用filter,这就是我要建议的! +1
【解决方案3】:

在javascript中,splice方法用于按索引删除数组元素。

见:

http://www.roseindia.net/java/javascript-array/javascript-array-remove-index.shtml

【讨论】:

  • 看过,搜索过,但无法解决我的问题。不过还是谢谢你的建议。
  • 另外我想搜索对象,然后删除它。
【解决方案4】:

尝试使用“删除”将其删除

for (var i in possibleFollowers) {
    if (possibleFollowers[i]['followerId'] == '216') {
        delete possibleFollowers[i];
    }
}

【讨论】:

  • 这将在其位置创建一个null 条目。
猜你喜欢
  • 2013-05-05
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 2010-09-17
相关资源
最近更新 更多