De ce „forEach nu este o funcție” pentru acest obiect? (Programare, Javascript, Obiect, Foreach)

haventchecked a intrebat.

Probabil că este ceva foarte prostesc, dar nu înțeleg de ce nu funcționează.

var a = {"cat":"large"};

a.forEach(function(value, key, map){
    console.log(value);
});

Uncaught TypeError: a.forEach nu este o funcție

http://jsfiddle.net/ty7z6pse/

Comentarii

  • forEach este definită în Array‘s prototype, nu în Object. –  > Por thefourtheye.
  • Pentru că obiectele nu au forEachdar array-urile au –  > Por adeneo.
  • hărțile nu au această funcție? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Este var a = {}; nu se creează o hartă? De ce se construiește o matrice cu [] (din moment ce forEach funcționează pe o variabilă creată astfel) ? –  > Por haventchecked.
  • @haventchecked Nu, un Map este un nou standard ES6. Ceea ce aveți este un object literal. Dacă doriți un Map în schimb, este var map = new Map(); map.set("cat", "large"); –  > Por CodingIntrigue.
3 răspunsuri
TaoPR

Obiectul nu are forEach, el aparține de Array prototip. Dacă doriți să iterați fiecare pereche cheie-valoare din obiect și să luați valorile. Puteți face acest lucru:

Object.keys(a).forEach(function (key){
    console.log(a[key]);
});

Notă de utilizare: Pentru un obiect v = {"cat":"large", "dog": "small", "bird": "tiny"};, Object.keys(v) vă oferă un tablou al cheilor, astfel încât să obțineți [„pisică”, „câine”, „pasăre”]

Comentarii

  • Ce vrei să spui @RGraham? –  > Por TaoPR.
  • Oh, tocmai am observat asta. A fost prea repede, așa că nu am observat. Da, mai bine lăsați și un comentariu sau o sugestie. –  > Por TaoPR.
Ahmed Younes

Când am încercat să accesez rezultatul de la

Object.keys(a).forEach(function (key){
console.log(a[key]);
});

a fost un rezultat în text simplu, fără perechi cheie-valoare Iată un exemplu

var fruits = {
    apple: "fruits/apple.png",
    banana: "fruits/banana.png",
    watermelon: "watermelon.jpg",
    grapes: "grapes.png",
    orange: "orange.jpg"
}

Acum vreau să obțin toate legăturile într-o matrice separată, dar cu acest cod

    function linksOfPics(obJect){
Object.keys(obJect).forEach(function(x){
    console.log('"'+obJect[x]+'"');
});
}

rezultatul din :

linksOfPics(fruits)



"fruits/apple.png"
 "fruits/banana.png"
 "watermelon.jpg"
 "grapes.png"
 "orange.jpg"
undefined

M-am gândit la acesta care rezolvă ceea ce caut eu

  console.log(Object.values(fruits));
["fruits/apple.png", "fruits/banana.png", "watermelon.jpg", "grapes.png", "orange.jpg"]

Arosha

Dacă chiar trebuie să folosiți o interfață foreach securizată pentru a itera un obiect și pentru a o face reutilizabilă și curată cu un modul npm, atunci folosiți acest lucru,https://www.npmjs.com/package/foreach-object

Ex:

import each from 'foreach-object';
   
const object = {
   firstName: 'Arosha',
   lastName: 'Sum',
   country: 'Australia'
};
   
each(object, (value, key, object) => {
   console.log(key + ': ' + value);
});
   
// Console log output will be:
//      firstName: Arosha
//      lastName: Sum
//      country: Australia