从每个条目的键不同的对象中删除项目

时间:2015-05-27 13:26:29

标签: javascript lodash

我在Javascript中存储一个键值对列表,其中每个条目的键不同:

8f348f-b4d0-66bf-b0cj-a31b9c45c: "Pete"
ff5764-7863-6pc9-b72f-195f2h962: "Dave"

密钥是已连接会话的连接ID,值是用户名。然后我想从列表中删除一个项目,传递:

Key: "8f348f-b4d0-66bf-b0cj-a31b9c45c"
Value: "Dave"

我知道密钥将是唯一的,但价值可能不是。

我试过了:

var removedIndex = _.findIndex(usersConnected, function (item) {
     return item.key == connection.key;
});

但即使应该匹配,这也会返回-1。如果这可行,我可以删除该项目如下:

if (removedIndex > -1) {
    usersConnected.splice(removedIndex , 1);
}

codepen

3 个答案:

答案 0 :(得分:4)

如果我理解你的情况,你应该能够做到:

delete usersConnected[connection.Key];

这假设usersConnected实际上是一个对象,connection看起来像这样:

{ Key: 'the-connection-id', Value: 'the value' }

请注意,对于运行时优化,通常最好将值设置为null而不是删除:

usersConnected[connection.Key] = null;

但这是一个与您的主要问题无关的优化,其中主要包括安静任何最佳做法斗牛犬。 : - )

答案 1 :(得分:1)

items Object不是Array,而Object中没有方法splice,对于Object中的删除项使用{{ 1}}



delete items[item.key]




答案 2 :(得分:1)

似乎您在codepen中的数据不正确:

请参阅JsFiddle

您的数据应如下所示:

var items =    [{key: "8f348f-b4d0-66bf-b0cj-a31b9c45c", value: "Pete"}, {key: "ff5764-7863-6pc9-b72f-195f2h962", value: "Dave"}]

不喜欢:

var items =     {"8f348f-b4d0-66bf-b0cj-a31b9c45c": "Pete", "ff5764-7863-6pc9-b72f-195f2h962": "Dave"}

您的数据应该是具有“键”和“值”属性的对象数组。