我在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);
}
答案 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"}
您的数据应该是具有“键”和“值”属性的对象数组。