Creating an array of objects using an array of each object's name
I feel tantalizingly close here. Scenario: I have a JSON sent in a message that looks something like this:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
As you can see, the objects are not in an array. I created an array containing each Object's string name using the Object.keys function and then created another array which contains the objects that I want using an if statement, which leads to my current question:
How can I create an array of objects using the string values (the object keys) contained in the array I have created?
I've tried something like this:
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = ;
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
But the newObjArray
is just displaying all undefined. Ideally the newObjArray
displays something like this:
[{"object_name1":{...}},{"object_name2":{...}}]
Thoughts?
javascript arrays object
add a comment |
I feel tantalizingly close here. Scenario: I have a JSON sent in a message that looks something like this:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
As you can see, the objects are not in an array. I created an array containing each Object's string name using the Object.keys function and then created another array which contains the objects that I want using an if statement, which leads to my current question:
How can I create an array of objects using the string values (the object keys) contained in the array I have created?
I've tried something like this:
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = ;
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
But the newObjArray
is just displaying all undefined. Ideally the newObjArray
displays something like this:
[{"object_name1":{...}},{"object_name2":{...}}]
Thoughts?
javascript arrays object
2
Your input's syntax is invalid, specifically the}, {
part - objects have key-value pairs, not just plain values
– CertainPerformance
Dec 29 '18 at 22:50
1
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56
add a comment |
I feel tantalizingly close here. Scenario: I have a JSON sent in a message that looks something like this:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
As you can see, the objects are not in an array. I created an array containing each Object's string name using the Object.keys function and then created another array which contains the objects that I want using an if statement, which leads to my current question:
How can I create an array of objects using the string values (the object keys) contained in the array I have created?
I've tried something like this:
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = ;
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
But the newObjArray
is just displaying all undefined. Ideally the newObjArray
displays something like this:
[{"object_name1":{...}},{"object_name2":{...}}]
Thoughts?
javascript arrays object
I feel tantalizingly close here. Scenario: I have a JSON sent in a message that looks something like this:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
As you can see, the objects are not in an array. I created an array containing each Object's string name using the Object.keys function and then created another array which contains the objects that I want using an if statement, which leads to my current question:
How can I create an array of objects using the string values (the object keys) contained in the array I have created?
I've tried something like this:
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = ;
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
But the newObjArray
is just displaying all undefined. Ideally the newObjArray
displays something like this:
[{"object_name1":{...}},{"object_name2":{...}}]
Thoughts?
javascript arrays object
javascript arrays object
edited Jan 1 at 21:10
GPP
asked Dec 29 '18 at 22:49
GPPGPP
6981916
6981916
2
Your input's syntax is invalid, specifically the}, {
part - objects have key-value pairs, not just plain values
– CertainPerformance
Dec 29 '18 at 22:50
1
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56
add a comment |
2
Your input's syntax is invalid, specifically the}, {
part - objects have key-value pairs, not just plain values
– CertainPerformance
Dec 29 '18 at 22:50
1
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56
2
2
Your input's syntax is invalid, specifically the
}, {
part - objects have key-value pairs, not just plain values– CertainPerformance
Dec 29 '18 at 22:50
Your input's syntax is invalid, specifically the
}, {
part - objects have key-value pairs, not just plain values– CertainPerformance
Dec 29 '18 at 22:50
1
1
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56
add a comment |
1 Answer
1
active
oldest
votes
If i understand what you want to do correctly you want to create an iterable array containing the child objects of objectName?
I would do it as below, if you use the array prototype map function you can in one line of code iterate over all the keys of the object using Object.keys(target) and return the properties you want (in this case the inner child objects) as array elements via map.
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
mapped as in your example, method 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
iterating over the filteredKeyArray, method 2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
Note that these solutions assume that you will have a key in your filteredKeyArray to match the child object to as the map iterates through, you may want to add a check to check if the length of the filteredKeyArray is longer than the map iterator, or if filteredKeyArray[i] is undefined if using method 1. If using method two you may need to check for undefined before referencing Object.keys(strangeObject.objects)[i] as you may have less objects that fiteredKeyArray keys.
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? EgfilteredKeyArray = ['object_name1','object_name2']
and{"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53973917%2fcreating-an-array-of-objects-using-an-array-of-each-objects-name%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
If i understand what you want to do correctly you want to create an iterable array containing the child objects of objectName?
I would do it as below, if you use the array prototype map function you can in one line of code iterate over all the keys of the object using Object.keys(target) and return the properties you want (in this case the inner child objects) as array elements via map.
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
mapped as in your example, method 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
iterating over the filteredKeyArray, method 2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
Note that these solutions assume that you will have a key in your filteredKeyArray to match the child object to as the map iterates through, you may want to add a check to check if the length of the filteredKeyArray is longer than the map iterator, or if filteredKeyArray[i] is undefined if using method 1. If using method two you may need to check for undefined before referencing Object.keys(strangeObject.objects)[i] as you may have less objects that fiteredKeyArray keys.
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? EgfilteredKeyArray = ['object_name1','object_name2']
and{"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
add a comment |
If i understand what you want to do correctly you want to create an iterable array containing the child objects of objectName?
I would do it as below, if you use the array prototype map function you can in one line of code iterate over all the keys of the object using Object.keys(target) and return the properties you want (in this case the inner child objects) as array elements via map.
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
mapped as in your example, method 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
iterating over the filteredKeyArray, method 2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
Note that these solutions assume that you will have a key in your filteredKeyArray to match the child object to as the map iterates through, you may want to add a check to check if the length of the filteredKeyArray is longer than the map iterator, or if filteredKeyArray[i] is undefined if using method 1. If using method two you may need to check for undefined before referencing Object.keys(strangeObject.objects)[i] as you may have less objects that fiteredKeyArray keys.
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? EgfilteredKeyArray = ['object_name1','object_name2']
and{"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
add a comment |
If i understand what you want to do correctly you want to create an iterable array containing the child objects of objectName?
I would do it as below, if you use the array prototype map function you can in one line of code iterate over all the keys of the object using Object.keys(target) and return the properties you want (in this case the inner child objects) as array elements via map.
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
mapped as in your example, method 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
iterating over the filteredKeyArray, method 2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
Note that these solutions assume that you will have a key in your filteredKeyArray to match the child object to as the map iterates through, you may want to add a check to check if the length of the filteredKeyArray is longer than the map iterator, or if filteredKeyArray[i] is undefined if using method 1. If using method two you may need to check for undefined before referencing Object.keys(strangeObject.objects)[i] as you may have less objects that fiteredKeyArray keys.
If i understand what you want to do correctly you want to create an iterable array containing the child objects of objectName?
I would do it as below, if you use the array prototype map function you can in one line of code iterate over all the keys of the object using Object.keys(target) and return the properties you want (in this case the inner child objects) as array elements via map.
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
mapped as in your example, method 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
iterating over the filteredKeyArray, method 2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
Note that these solutions assume that you will have a key in your filteredKeyArray to match the child object to as the map iterates through, you may want to add a check to check if the length of the filteredKeyArray is longer than the map iterator, or if filteredKeyArray[i] is undefined if using method 1. If using method two you may need to check for undefined before referencing Object.keys(strangeObject.objects)[i] as you may have less objects that fiteredKeyArray keys.
edited Dec 29 '18 at 23:35
answered Dec 29 '18 at 23:19
Happy MachineHappy Machine
450213
450213
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? EgfilteredKeyArray = ['object_name1','object_name2']
and{"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
add a comment |
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? EgfilteredKeyArray = ['object_name1','object_name2']
and{"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? Eg
filteredKeyArray = ['object_name1','object_name2']
and {"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
Thanks! Does it matter if the filteredKeyArray has more items within it than the nested objects in the initial remapping? Eg
filteredKeyArray = ['object_name1','object_name2']
and {"strangeObject":{"object_name1":{...}}
– GPP
Dec 30 '18 at 8:13
1
1
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
Personally I would map over the object and use the maps iterator to get you the relevant filteredKeyArray (as in method 1) you could substitute that map return object key for [filteredKeyArray[i] || 'unnamed'] for example. That way if filteredKeyArray[i] is undefined youll get your default value (in this case unnamed) as the key instead of 'undefined. Happy hunting!
– Happy Machine
Dec 30 '18 at 17:21
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53973917%2fcreating-an-array-of-objects-using-an-array-of-each-objects-name%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Your input's syntax is invalid, specifically the
}, {
part - objects have key-value pairs, not just plain values– CertainPerformance
Dec 29 '18 at 22:50
1
That's not valid JSON - where did you get it?
– ic3b3rg
Dec 29 '18 at 22:54
What would you like your output to be? Please post a Minimal, Complete, and Verifiable Example, including desired output.
– Jack Bashford
Dec 29 '18 at 22:56