6

I have the following:

var tags = ["Favorite", "Starred", "High Rated"]; for (var tag in tags) { console.log(tag); } 

Output is

0 1 2 

I'd like it to output:

Favorite Starred High Rated 

How do I do this? Thanks.

2
  • 3
    console.log(tags[tag]) Commented Jul 6, 2013 at 2:12
  • @onetrickpony this worked. Please submit as answer and I'll mark as correct. Thanks. Commented Jul 6, 2013 at 2:15

2 Answers 2

7

Itearting over an array:

That's an array of strings, don't use for..in, use the vanilla for loop:

var tags = ["Favorite", "Starred", "High Rated"]; for (var i = 0; i < tags.length; i++) { // proper way to iterate an array console.log(tags[i]); } 

Output:

Favorite Starred High Rated 

Proper usage of for..in:

It is meant for object's properties, like:

var tags2 = {"Favorite": "some", "Starred": "stuff", "High Rated": "here"}; for (var tag in tags2) { // enumerating objects properties console.log("My property: " + tag +"'s value is " +tags2[tag]); } 

Output:

My property: Favorite's value is some My property: Starred's value is stuff My property: High Rated's value is here 

Side effects of for..in with arrays:

Don't take my word for it, let's see why not use it: for..in in arrays can have side effects. Take a look:

var tags3 = ["Favorite", "Starred", "High Rated"]; tags3.gotcha = 'GOTCHA!'; // not an item of the array // they can be set globally too, affecting all arrays without you noticing: Array.prototype.otherGotcha = "GLOBAL!"; for (var tag in tags3) { console.log("Side effect: "+ tags3[tag]); } 

Output:

Side effect: Favorite Side effect: Starred Side effect: High Side effect: GOTCHA! Side effect: GLOBAL! 

See a demo fiddle for these codes.

Sign up to request clarification or add additional context in comments.

1 Comment

+1 for object's properties usage
0

Using in in for loops in JavaScript is not like : in Java or foreach in other languages - instead of providing reference to the element, it provides its index. If you use a framework like jQuery, there is a method - $.each which gives access to the element (not only the index) via callback when iterating:

var a = ["Favorite", "Starred", "High Rated"]; $.each ( a, function ( index, data ) { console.log ( data ); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

2 Comments

Why would you use jQuery just to iterate over an array?
That's not true. for..in does NOT return the index, but the properties of the object. If you use an array the properties are it's indexes, but if you use an object you'll get a different output (e.g: var person = { name: 'John', age: 25 }; for(var c in person ) { console.log(c); }). I also wouldn't use jQuery for iterating through a list. Using native javascript is way more performatic .

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.