Javascript Object, liczba porządkowa danych

0

Cześć,

Mam Obiekt w którym dynamicznie zmieniają się dane oraz ich położenie w Obiekcie. Jak uzyskać liczbę porządkową w którym znajduje się wartość id1?

Na przykład:

0: {id1: "produkt1", cena: 105, liczba: "3"}
1: {id2: "produkt2", cena: 135, liczba: "3"}
2: {id3: "produkt3", cena: 96 , numer 3"}

Na piechotę, widząc dane możemy się do nich dobrać poprzez Object [0] .cena.
Jak poznać liczbę porządkową, znając niektóre wartości z obiektu ..

1

Dzięki , byłem tam wcześniej ale bez pozytywnych rezultatów. Cokolwiek wpiszę, zwraca mi -1. Chodzi mi o to, że gdy szukam czegoś o id1 i znajduję ten produkt w Obiekcie, to otrzymuję od razu liczbę porządkową samego Obiektu. Potrzebne jest mi to by pobrać cenę. Czyli Obiekt[0].cena i zwraca mi 105, Obiekt[1].cena zwraca

Bo widzisz, gdyby Twoja struktura danych miała sens i postarałbyś się chociaż na tyle aby wkleić poprawne dane ( bez błędu składniowego ) to wszystko byłoby łatwiejsze.
Także zacznijmy od tego, że twoje obiekty są bez sensu i wątpię, że właśnie tak mają wyglądać.

Twoja struktura:

      var myArray = [
        {id1: "produkt1", cena: 105, liczba: "3"},
        {id2: "produkt2", cena: 135, liczba: "3"},
        {id3: "produkt3", cena: 96 , numer "3"}
      ];

Raczej ma być:

      var myArray = [
        {id: "produkt1", cena: 105, liczba: "3"},
        {id: "produkt2", cena: 135, liczba: "3"},
        {id: "produkt3", cena: 96 , numer: "3"}
      ];

I nagle wszystko magicznie zaczyna działać:

<html>
  <body>
      
    <script>

      var myArray = [
        {id: "produkt1", cena: 105, liczba: "3"},
        {id: "produkt2", cena: 135, liczba: "3"},
        {id: "produkt3", cena: 96 , numer: "3"}
      ];
      
      
      var index = myArray.findIndex(function ( myArray ) {      
                    return myArray.id == "produkt2"
                  });
                  
      alert ( index );
      
  
    </script>
  
  </body>
</html>

https://jsfiddle.net/ps9gearv/

2

Te klucze id1, id2, id3 maja niewiele sensu (nie lepiej każde mić jako id??). To jest tablica czy obiekt? Masz wpływ na to jaką strukturę mają dane?

0

@katakrowa: Obiekt otrzymuję z tablicy JSON (z localStorage ) bez nazwy. Wychodzi masło maślane. W Twoim przykładzie oczywiście wszystko gra. U mnie nadal nie. Co mogę zrobić by było dobrze?

0

Czy wy ludzie w ogóle czytacie co Wam odpisują?

Masz błędy składniowe w swojej tablicy.
Prawdopodobnie to w ogóle nie jest tablica, której oczekujesz bo:

0: {id1: "produkt1", cena: 105, liczba: "3"}
1: {id2: "produkt2", cena: 135, liczba: "3"}
2: {id3: "produkt3", cena: 96 , numer 3"} <<<---- TU JEST BŁĄD !!!

A skoro to nie jest poprawny obiekt / tablica to nie ma się co dziwić, że nic nie znajdujesz.

Nazwy pól obiektów id1, id2, id3 też są bez sensu.

Wklej cały swój kod jak chcesz wiedzieć więcej bo tu nie ma wróżbitów tylko są programiści.

0

@Maciej Cąderek: Mam, zasysam dane do obiekty i pcham do tablicy, stamtąd dane są przerzucane do obliczenia, następnie do LocalStorage i do następnej strony gdzie jest kosz.

0

@katakrowa: 2020-12-16 00.33.02  2f0540bf3058.png

0

Albo wklej cały kod albo to nie ma sensu. Przecież nie będę wróżył ani zgadywał co możesz mieć w kodzie.

0

Ok jeszcze jedno pytanie - chcesz znaleźć item z kluczem id1, czy z wartością klucza (product1)?

0

@katakrowa: o to chodzi?
btnAppend1.addEventListener(click, () => {
let quantity = document.getElementById("quantity1").value;
if(quantity>0){
const createLi = document.querySelector(".li");
const product1 = document.querySelector(".img1");
const element = product1.cloneNode(true);
createLi.appendChild(element);
const addToPopUp = document.querySelector(".popup");
addToPopUp.style.display = "block";
product1.style.display = "block";
let intager = document.querySelector(".intager").innerHTML = quantity;
let priceTo = (myProduct1.quantity*quantity)*myProduct1.price ;
let totalBasket = document.querySelector(".totalBasketPrice").innerHTML = priceTo ;
document.querySelector(".quant").innerHTML = intager + " szt.";
arr.push("a");
arrPrice = arrPrice.filter(person => person.id != 'product1');

const obj = arrPrice.push({
id1: "product1",
price: priceTo,
number: quantity,}
);
}
});

0

@Maciej Cąderek: product1

0

Ale co czy o to chodzi? ?
Ja nie wiem o co chodzi. To Ty musisz napisać o co chodzi a nie mnie pytać.

0

A nie możesz dac zamiast:

arrPrice.push({
  id1: "product1",
  price: priceTo,
  number: quantity,
});

tego:

arrPrice.push({
  id: "product1",
  price: priceTo,
  number: quantity,
});

??

Wtedy masz ładne dane i przykład @katakrowa działa.

0

Btw, skopane dane możesz zawsze przekonwertować:

const data = [
  { id1: "product1", price: 105, number: "3" },
  { id2: "product2", price: 135, number: "3" },
  { id3: "product3", price: 96, number: "3" },
];

const niceData = data.map((row) =>
  Object.fromEntries(
    Object.entries(row).map(([key, val]) => [
      key.match(/^id\d+$/) ? "id" : key,
      val,
    ])
  )
);

console.log(niceData);

/* Result:

[
  { id: 'product1', price: 105, number: '3' },
  { id: 'product2', price: 135, number: '3' },
  { id: 'product3', price: 96, number: '3' }
]

*/

Ale polecam raczej po prostu ładnie przygotowac dane skoro masz na to wpływ.

0

@Maciej Cąderek: nadal otrzymuję -1. Czy to, że tablica jest utworzona z Obiektu JSON ma jakieś tu znacznie?

0

@katakrowa: Mój błąd z literówką, wszystko działa. Wielkie dzięki!

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