Creating an array of objects using an array of each object's name












0















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?










share|improve this question




















  • 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
















0















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?










share|improve this question




















  • 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














0












0








0








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?










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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














  • 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












1 Answer
1






active

oldest

votes


















2














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.






share|improve this answer


























  • 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





    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











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
});


}
});














draft saved

draft discarded


















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









2














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.






share|improve this answer


























  • 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





    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
















2














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.






share|improve this answer


























  • 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





    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














2












2








2







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.






share|improve this answer















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.







share|improve this answer














share|improve this answer



share|improve this answer








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? Eg filteredKeyArray = ['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








  • 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




















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Angular Downloading a file using contenturl with Basic Authentication

Olmecas

Can't read property showImagePicker of undefined in react native iOS