4

How can I get the values from this associative array in JavaScript?

I just need the email addresses and not the labels.

(
 {
 office = ("[email protected]");
 home = ("[email protected]");
 work = ("[email protected]");
 },
 {
 home = ("[email protected]");
 }
)

UPDATE: Prefered output in JSON would be:

{
 "data": [
 {
 "email": "[email protected]"
 },
 {
 "email": "[email protected]"
 },
 {
 "email": "[email protected]"
 },
 {
 "email": "[email protected]"
 }
 ]
}

Thankful for all input!

simhumileco
35.3k18 gold badges148 silver badges125 bronze badges
asked Apr 19, 2011 at 18:44

6 Answers 6

4

What you probably meant to do is:

var x = [{
 office: ("[email protected]"),
 home: ("[email protected]"),
 work: ("[email protected]")
},
{
 home: ("[email protected]")
}]

and:

for(var j = 0; j < x.length; j++)
{
 for(var anItem in x[j])
 {
 console.log(x[j][anItem])
 }
}

// EDIT: however, it's not the best practice to use for ... in.

Maybe you could change your data structure to:

var x = [[{
 value: "[email protected]",
 type: "office"
 },
 {
 value: "[email protected]",
 type: "home"
 },
 {
 value: "[email protected]",
 type: "work"
 }],
 [{
 value: "[email protected]",
 type: "home"
 }]];

and iterate over using:

for( var i = 0, xlength = x.length; i < xlength; i++ )
{
 for( var j=0, ylength = x[i].length; j < ylength; j++ )
 {
 console.log(x[i][j].value);
 }
}
answered Apr 19, 2011 at 18:49
Sign up to request clarification or add additional context in comments.

2 Comments

I cannot change the data structure. I am developing an iPhone application in Appcelerator and this is what I get when I request information from the build in addressbook. They best would be if I could get the final output (addresses only) in JSON format. Is this possible?
The current out put is now: [["[email protected]"],["[email protected]"],["[email protected]"],["[email protected]"]] in JSON. I would be cool if this could be: {"data": [{"email": "[email protected]"},{"email": "[email protected]"},{"email": "[email protected]"},{"email": "[email protected]"}]}. Is this possible?
4

Here's a one-liner:

console.log(Object.keys(assoc).map(k => assoc[k]));

where assoc is your associative array.

Edit

I have a better answer here.

answered Dec 26, 2019 at 22:42

Comments

2

It seems that you're looking for Object.values.

answered Jun 10, 2020 at 14:14

1 Comment

Please give the specific answer that refer to the question
1

You can 'foreach' over the object to get it's properties:

for(var j = 0; j < mySet.length; j++)
{
 for(var propName in mySet[j])
 {
 var emailAddress = mySet[j][propName];
 // Do Stuff
 }
}
answered Apr 19, 2011 at 18:45

4 Comments

I got an error with the above code (myObj) changed it to mySet and made an alert of emailAddress but each alert was empty. What is wrong?
This time it worked perfectly! Thanks! Is it possible to rename all labels to the same name for example the word email instead of work?
You can translate those values into another object of your choosing.
he current out put is now: [["[email protected]"],["[email protected]"],["[email protected]"],["[email protected]­e"]] in JSON. I would be cool if this could be: {"data": [{"email": "[email protected]"},{"email": "[email protected]"},{"email": "[email protected]"},{"email": "[email protected]"}]}. Is this possible?
0

Answer for edited question:

var ret = {data: []};
for(var j = 0; j < x.length; j++)
{
 for(var anItem in x[j])
 {
 ret.data.push({
 email: x[j][anItem]
 });
 }
}
console.log(ret);

The result is kept in ret.

answered Apr 19, 2011 at 21:04

Comments

0

Is it your input in JSON format? Because if so, it's the wrong syntax. However

let _in = [
 {
 office : "[email protected]",
 home : "[email protected]",
 work : "[email protected]",
 },
 {
 home : "[email protected]"
 }
]
let _out = []
_in.forEach( record => { 
 _out = _out.concat(Object.values(record).map(x => new Object({email : x})))
})
console.log(_out)

for each record I extracted values and "packed" into an object with the "email" attrbiute, then I merged all those arrays obtained from the original array of records

answered Mar 1, 2020 at 14:55

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.