Nietypowe sortowanie w javascript

0

Cześć!
Mam kilka pytań które kręcą się wokół sortowania.

  1. Czy dla języka javascript jest różnica między:
var obiekt = {
	kotki: 5,
	pieski: 2,	
	sroki: 8,
	krogulce: 1
}

A:

var obiekt = {
	sroki: 8,
	kotki: 5,
	pieski: 2,
	krogulce: 1
}
  1. Jeśli jest to jak można sortować obiekt w taki sposób jak wyżej?
  2. Czy można stworzyć funkcje która dla: krogulce ,zwróci wartość 4 (czwarta właściwość) ?
  3. Jaka funkcja sprawdza czy obiekt posiada właściwość krogulce ?
0
  1. Zależy jak na to patrzeć. Z jednej strony, te obiekty mają różną kolejność pól, a z drugiej - JS nie gwarantuje zachowywania tej kolejności (https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order).

  2. Nie rozumiem pytania.

  3. Object.keys(obiekt).indexOf('krogulce').

  4. Object.keys(obiekt).contains('krogulce').

Przy czym ad 3: JS nie gwarantuje zachowywania kolejności pól (tak jak opisałem w pierwszej odpowiedzi), zatem nie powinieneś traktować tego w żaden sposób ponad ciekawostkę.

0

Na temat odpowiadaj w postach;

Ad 2: tak, hipotetycznie istnieje taka możliwość, jednak - jak wspomniałem - JS nie gwarantuje kolejności pól. Co próbujesz osiągnąć?

0

Mam problem optymalizacyjny. Mam dziesięć obiektów. Każdy zawiera tak jak w przykładzie nazwę zwierzęcia i ilość. Zwierząt w obiekcie jest 4 lub 3. Przy czym pierwsze zwierzę w obiekcie powinno mieć wagę 5 a każde następne wagę o 1 niższą. Potem chcę średnią z wag danego zwierzęcia w obiektach pomnożyć przez ilość tych zwierząt łącznie we wszystkich obiektach i posortować od największej ilości punktów do najmniejszej. Wystarczająco jasno? :D

0

Powinieneś wykorzystać mapę lub tablicę obiektów ([{name: 'Bóbr', count: 1}, { ... }]) - obiekty JS nie mają zdefiniowanej kolejności, zatem nie powinieneś opierać o to swojego algorytmu.

0

Wpisałem Object.keys(obiekt).contains('krogulce') w konsolę chrome i nie zwróciło mi true tylko wyrzuciło:
VM28967:1 Uncaught TypeError: Object.keys(...).contains is not a function
at <anonymous>21

1

contains jest dostępne np. w bibliotece ramda (przydatka do programowania funkcyjnego), natomiast w JS jest includes który nie jest w pełni wspierany na IE.

Co do obiektów, to warto zapamiętać tę uwagę o kolejności, bo kiedyś mieliśmy takiego buga, że na jednym komputerze działało jak trzeba, a na innym nie, a wszystko przez niegwarantowanie kolejności property; )

1 użytkowników online, w tym zalogowanych: 0, gości: 1