tutaj wprowadź opis obrazu Próbuje przekonwertować poniższy obiekt na tablicę, ale nie można uzyskać oczekiwanej tablicy.

chipsLeaderboardData: "{    
  "100297098919": "380000",
  "100049707310": "21400000",
  "1000990423916": "2000",
  "1001263171666": "17000000",
  "100506562791": "2000",
  "100703099379": "1100000"
}"

--- Moja próba: ---

let boardChipsWon = [];
let chipsLeaderboardData = t.chipsLeaderboardData
for (var chip in chipsLeaderboardData) {
   boardChipsWon.push(chipsLeaderboardData[chip])
}
console.log("boardChip won", boardChipsWon)
0
Dholu 3 kwiecień 2020, 19:51

4 odpowiedzi

Najlepsza odpowiedź

Wygląda na to, że t.chipsLeaderboardData jest w rzeczywistości ciągiem json. Musisz go najpierw przeanalizować, na przykład:

let chipsLeaderboardData = JSON.parse(t.chipsLeaderboardData);

A twój kod powinien działać dobrze.

let t = { chipsLeaderboardData: '{"100297098919":"380000","100049707310":"21400000","1000990423916":"2000","1001263171666":"17000000","100506562791":"2000","100703099379":"1100000"}' };

let boardChipsWon = [];
let chipsLeaderboardData = JSON.parse(t.chipsLeaderboardData);
for (var chip in chipsLeaderboardData) {
  boardChipsWon.push(chipsLeaderboardData[chip])
}
console.log("boardChip won", boardChipsWon)
.as-console-wrapper { max-height: 100% !important; top: 0; }

Więc w zasadzie twój kod nie zadziałał, ponieważ próbujesz zapętlić łańcuch json.

Ponadto zamiast pętli for...in możesz użyć Object.values(), aby osiągnąć ten sam wynik, jest jedna linia, na przykład:

let t = { chipsLeaderboardData: '{"100297098919":"380000","100049707310":"21400000","1000990423916":"2000","1001263171666":"17000000","100506562791":"2000","100703099379":"1100000"}'};

let boardChipsWon = Object.values(JSON.parse(t.chipsLeaderboardData));
console.log("boardChip won", boardChipsWon)
.as-console-wrapper { max-height: 100% !important; top: 0; }

Aby uzyskać parę klucz-wartość w tablicy, możesz użyć Object.entries() metoda:

let t = { chipsLeaderboardData: '{"100297098919":"380000","100049707310":"21400000","1000990423916":"2000","1001263171666":"17000000","100506562791":"2000","100703099379":"1100000"}'};

let boardChipsWon = Object.entries(JSON.parse(t.chipsLeaderboardData));
console.log(boardChipsWon)
.as-console-wrapper { max-height: 100% !important; top: 0; }

Lub lepsza opcja, taka jak:

let t = { chipsLeaderboardData: '{"100297098919":"380000","100049707310":"21400000","1000990423916":"2000","1001263171666":"17000000","100506562791":"2000","100703099379":"1100000"}'};

let boardChipsWon = Object.entries(JSON.parse(t.chipsLeaderboardData))
  .map(([key, value]) => ({[key]: value}));
console.log(boardChipsWon)
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
palaѕн 3 kwiecień 2020, 17:18

Jak wskazano w komentarzu, prawdopodobnie nie używasz obiektu, ale ciągu znaków, oto jak to naprawić.

let boardChipsWon = [];
let chipsLeaderboardData = JSON.parse(t.chipsLeaderboardData);

for (var chip in chipsLeaderboardData) {
   boardChipsWon.push(chipsLeaderboardData[chip])
}

console.log("boardChip won", boardChipsWon)
0
Daniel 3 kwiecień 2020, 16:59

Możesz użyć funkcji Object.entries ():

          for ( let [key, value] of  Object.entries(chipsLeaderboardData)){
            boardChipsWon.push(value)
          }
0
TheoWckr 3 kwiecień 2020, 16:58

Możesz przeanalizować ciąg JSON i pobrać wartości z obiektu za pomocą Object.values.

let json = '{"100297098919":"380000","100049707310":"21400000","1000990423916":"2000","1001263171666":"17000000","100506562791":"2000","100703099379":"1100000"}',
    boardChipsWon = Object.values(JSON.parse(json));

console.log("boardChip won", boardChipsWon);
0
Nina Scholz 3 kwiecień 2020, 16:59