На основании некоторых комментариев, приведенных ниже, приведен код, как удалить объект на основе имени ключа и значения ключа
var items = [
{ "id": 3.1, "name": "test 3.1"},
{ "id": 22, "name": "test 3.1" },
{ "id": 23, "name": "changed test 23" }
]
function removeByKey(array, params){
array.some(function(item, index) {
return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false;
});
return array;
}
var removed = removeByKey(items, {
key: 'id',
value: 23
});
console.log(removed);
Мне здесь что-то не хватает, но похоже, что в качестве резервного хранилища вы хотите использовать объект Dictionary, а не массивы.
Время индексации в словаре - O (1). Вы не можете победить постоянное время. :)
Что ж, вы можете, если ваше постоянное время ДЕЙСТВИТЕЛЬНО велико, но оно не для поиска по словарю. Просто убедитесь, что ваш метод GetHashCode дает хороший хеш, и вы должны быть золотыми.
почему бы вам не изменить свой класс здесь
class Manager
{
Foo CreateFoo(/*Some parameters here + Identifier*/)
{
// Create a new Foo here AND return it
}
void AddFoo(Foo foo)
{
// adds to yor collection
}
AddBar(/*Moar parameters + Foo instance*/)
{
foo.AddBar(/*Params*/);
}
}
Что-то в этом подходе попахивает ... но это только мое мнение.
Я думаю, что многое из того, что вы пытаетесь сделать, можно сделать с помощью инфраструктуры DI, такой как Spring.NET. Это позволит вам создавать и внедрять объекты в ваш код по «понятному имени», не беспокоясь об их точном типе (при условии, что они реализуют определенный интерфейс или расширяют определенный базовый класс).