Why is "forEach not a function" for this object?

JavascriptObjectForeach

Javascript Problem Overview


This is probably something really dumb, but I don't understand why this doesn't work.

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

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

Uncaught TypeError: a.forEach is not a function

http://jsfiddle.net/ty7z6pse/

Javascript Solutions


Solution 1 - Javascript

Object does not have forEach, it belongs to Array prototype. If you want to iterate through each key-value pair in the object and take the values. You can do this:

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

Usage note: For an object v = {"cat":"large", "dog": "small", "bird": "tiny"};, Object.keys(v) gives you an array of the keys so you get ["cat","dog","bird"]

Solution 2 - Javascript

When I tried to access the result from

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

it was plain text result with no key-value pairs Here is an example

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

Now i want to get all links in a separated array , but with this code

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

the result of :

linksOfPics(fruits)



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

I figured out this one which solves what I'm looking for

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

Solution 3 - Javascript

If you really need to use a secure foreach interface to iterate an object and make it reusable and clean with a npm module, then use this, 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

Solution 4 - Javascript

probably you are using string , consider that its a json obj

string_var.json() or JSON.parse(string_var) , now its usable in foreach

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhaventcheckedView Question on Stackoverflow
Solution 1 - JavascriptTaoPRView Answer on Stackoverflow
Solution 2 - JavascriptAhmed YounesView Answer on Stackoverflow
Solution 3 - JavascriptAroshaView Answer on Stackoverflow
Solution 4 - Javascriptulas korpeView Answer on Stackoverflow