Czy istnieje sposób, aby utworzyć strukturę danych zestawu (Unique Collections), takich jak java w javascript?Ustaw strukturę danych Java w javascript/jQuery
Odpowiedz
Dla zestawu łańcuchów użyłbym tylko obiektu o wartości true.
var obj = {};
obj["foo"] = true;
obj["bar"] = true;
if(obj["foo"])
{
// foo in set
}
Jest to w zasadzie jak HashSet pracuje w Javie, przy założeniu, że obiekt JavaScript jest realizowany jako hashtable (co jest typowe).
Napisałem implementację JavaScriptu zestawu hash, który jest podobny do Java HashSet. Pozwala na użycie dowolnego obiektu (nie tylko łańcuchów) jako elementu zestawu. Jest oparty na kluczach tabeli mieszającej.
http://code.google.com/p/jshashtable/downloads/list
Dokumentacja nastąpi niedługo, obiecuję. Na razie, źródło powinno dać API całkiem wyraźnie, a oto przykład:
var s = new HashSet();
var o1 = {name: "One"}, o2 = {name: "Two"};
s.add(o1);
s.add(o2);
s.add(o2);
s.values(); // Array containing o1 and a single reference to o2
Dobrze chociaż wydawało się być częstym problemem i znalazłem to, co wydawało się być a good Set class on the net który obsługuje obiektów Chciałem prostsze i skończyło się pisaniem jednego ... na wypadek, gdyby ktoś inny uznał to za przydatne ...
/**
* A Javascript Class that represents a set of unique values
*
* Usage:
*
* var s = new jsSet();
*
* s.add('a1'); s.add('a2');
*
* s.list(); >> ['a1','a2']
*
* s.remove('a1'); s.list(); >> ['a2']
*
* s.contains('a1') >> false
*
* s.contains('a2') >> true
*
* can be chained
* s.add(null).add('hello');
*
* add array
* s.addAll([ null, 'a', 'b' ]);
*
* remove array
* s.addAll([ null, 'a', 'b' ]);
*
* retrieve the elements as a list
* s.list();
*
* size of the set
* s.size();
*
*/
function jsSet() {
// null can also be an element of the set, but needs
// a separate indication to differentiate it from
// the string "null" as well
this.isNullAdded = false;
// private member variable hence no 'this'
var map = {};
// Scope for optimization
// could be cached instead of generating each time
// this.uniqueList = [];
// returns true if the element is in this set, false otherwise
this.contains = function(key) {
if (key === null)
return this.isNullAdded;
else if (key === undefined)
return false;
else
return map[key] ? true : false;
};
// adds the element to the set
this.add = function(val) {
if (val === null)
this.isNullAdded = true;
else if (val !== undefined)
map[val] = true;
return this;
};
// adds all the elements of the array to the set
this.addAll = function(val) {
if (val !== null && val !== undefined && val instanceof Array) {
for (var idx = 0; idx < val.length; idx++) {
this.add(val[idx]);
}
}
return this;
};
// removes the specified element from the set
this.remove = function(val) {
if (val === null)
this.isNullAdded = false;
else if (val !== undefined)
delete map[val];
return this;
};
// removes all the element in the array from the set
this.removeAll = function(val) {
if (val !== null && val !== undefined && val instanceof Array) {
for (var idx = 0; idx < val.length; idx++) {
console.log('val: %s:%s', idx, val[idx]);
this.remove(val[idx]);
}
}
return this;
};
// empties the set of all values
this.clear = function() {
this.isNullAdded = false;
map = {};
return this;
};
// returns the number of elements in the set
this.size = function() {
return this.list().length;
};
// returns true if the set is empty, false otherwise
this.isEmpty = function() {
return this.list().length > 0? false: true;
};
// returns the elements of the set as a list
this.list = function() {
var arr = [];
if (this.isNullAdded)
arr.push(null);
for (o in map) {
// protect from inherited properties such as
// Object.prototype.test = 'inherited property';
if (map.hasOwnProperty(o))
arr.push(o);
}
return arr;
};
};
jeśli nie potrzebujemy wartości null w zestawie, możemy po prostu usunąć (null) po dodaniu wszystkich elementów. – msanjay
- 1. Jak uzyskać strukturę tabeli bazy danych w java?
- 2. Konwertuj strukturę danych MIDI na Java (List, Hash Map, ???)
- 3. Jak mogę dalej optymalizować tę strukturę danych?
- 4. Jak zaimplementować strukturę zbiorów danych w Javie?
- 5. Jak spłaszczyć strukturę w iskrowegowej ramce danych?
- 6. Jak utrzymać strukturę danych wykresu w relacyjnej bazie danych?
- 7. Jak odwzorować strukturę danych XML na bazę danych za pomocą JPA (Java EE)
- 8. Którą strukturę danych należy użyć do geokodowania?
- 9. Jak mogę odkryć strukturę bazy danych PostgreSQL?
- 10. Którą strukturę danych powinienem tu użyć?
- 11. Czy PHP ma strukturę danych zestawu?
- 12. Jak rekurencyjnie przejść strukturę zagnieżdżonych danych hashowych?
- 13. Jak mogę odkryć strukturę bazy danych Mongo?
- 14. Czy Python ma wbudowaną strukturę danych linkedList?
- 15. Czy Python ma strukturę danych linowych?
- 16. Ustaw wartość na wyliczenie - Java
- 17. Ustaw wszystkie miesiące na listę w java
- 18. sbt ustaw java opcje w zadaniu dynamicznym
- 19. Ustaw poziom zgodności Java w CXF wsdl2java
- 20. Ustaw klasę Java jako sekwencję w Clojure
- 21. Zaktualizuj strukturę DataSet w Visual Studio, aby dopasować nową strukturę bazy danych SQL
- 22. Jak zaimplementować strukturę danych wykresu w java? Czy istnieje jakaś dostępna biblioteka?
- 23. Ustaw bazę danych dla modelu?
- 24. Zweryfikuj strukturę bazy danych? (SQLite w C++/Qt)
- 25. Czy model zachowuje swoją strukturę po odebraniu danych w kontrolerze?
- 26. Jak przenieść strukturę C do java za pomocą JNI?
- 27. Podstawowa struktura danych [] Drzewo danych w języku Java
- 28. Ustaw domyślne zakończenie linii na Java
- 29. Poczta Java, ustaw adres zwrotny nie działa
- 30. Java: Jak mogę skompilować całą strukturę katalogów kodu?
Jak usunąć obiekt z tego zestawu? obj ["foo"] = null? lub obj ["foo"] = false? –
@Eran, 'delete obj [" foo "]' lub 'delete obj.foo'. –
Dzięki za nauczenie starego psa nowej sztuczki :) to jest niesamowite Nigdy nie spotkałem go w JS, sprowadza mnie z powrotem do moich C++ dni ... –