0

In Javascript, is it possible to get the Index of the object (in an array of objects) and use it inside of the same object in a function?

For example:

const foo = [
 {
 id: 1,
 comments: getComments(this.index) // index of the object goes here
 },
 {
 id: 34,
 comments: getComments(this.index) // index of the object goes here
 },
 {
 id: 21,
 comments: getComments(this.index) // index of the object goes here
 }
]
const getComments = function(index) {
 return foo[index].id // return the ID of the actual object
}

Or is there a workaround for what I'm trying to achieve here?

asked Jan 28, 2021 at 19:47
6
  • 1
    At the time you're calling the function, the array doesn't even exist yet. Commented Jan 28, 2021 at 19:53
  • What is this.index supposed to be? Commented Jan 28, 2021 at 19:53
  • Why do you need the index instead of the object itself? Commented Jan 28, 2021 at 19:54
  • Also getComments won't exist when the array is defined. (I am confused) Commented Jan 28, 2021 at 19:55
  • If this worked, you would just be setting comments to the same thing as the id property. What's the point of that? Commented Jan 28, 2021 at 19:56

2 Answers 2

1

Do it in two steps. First create the array of objects, then fill in the comments property by calling the function on each element.

const foo = [
 {
 id: 1,
 },
 {
 id: 34,
 },
 {
 id: 21,
 }
]
foo.forEach(el => el.comments = getComments(el));
function getComments(obj) {
 return obj.id;
}
console.log(foo);

answered Jan 28, 2021 at 20:00
Sign up to request clarification or add additional context in comments.

1 Comment

Really nice, it makes sense to run a function after the array has been created. How silly of me to not thinking of that. Thanks for pointing it out.
1

I assume this is for learning purposes as probably the use you are thinking could be implemented in a better way. The closest that you can do is this:

let foo = [
 {
 id: 1,
 },
 {
 id: 34,
 },
 {
 id: 21,
 }
]
foo = foo.map(
 (elem, index) => ({...elem, comments: getComments(index)})
)
function getComments(index) {
 return foo[index].id // return the ID of the actual object
}
console.log(foo[2].comments)

answered Jan 28, 2021 at 20:28

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.