-1

I know this is going to be pretty basic, and will probably get down voted on this but I am kinda lost at the moment.

I have an array of objects

let data = [
  {id:1, Name: "Abe", RowNumber: 1 },
  {id:2, Name: "Bob", RowNumber: 2 },
  {id:3, Name: "Clair", RowNumber: 3 },
  {id:4, Name: "Don", RowNumber: 3.0 },
  {id:5, Name: "Edna", RowNumber: 3.1 },
  {id:6, Name: "Frank", RowNumber: 3.2 },
  {id:7, Name: "Gabe", RowNumber: 4 },
  {id:8, Name: "Helen", RowNumber: 5 },
  {id:9, Name: "Isabelle", RowNumber: 6 },
  {id:10, Name: "Jane", RowNumber: 7 },
  {id:11, Name: "Ken", RowNumber: 8 },
];

and I am trying to loop through them going backward and not forward, I have come up with this

for(let i = data.length; i != 0; i--){
    console.log(data[i].Name);
}

and that is not working, I get an error about Name being undefined.

Can someone tell me where I am going wrong

3
  • 5
    If you have an array ["a", "b", "c"], it has indexes 0, 1, and 2. But it has length 3 - if you take array[array.length], you'd get undefined. You start your iteration at data.length, which doesn't exist as an index. Commented Nov 4, 2019 at 21:51
  • 2
    Try for(let i = data.length - 1; i >= 0; i--){ console.log(data[i].Name); } Commented Nov 4, 2019 at 21:52
  • @HereticMonkey it might, although the body of the mentioned question asks why does a code with incrementation work (EDIT: @HereticMonkey mentioned stackoverflow.com/questions/55520074/…) Commented Nov 4, 2019 at 21:55

3 Answers 3

2

You iterate from .length to 1 inclusive. Apply a decrease by one someplace to iterate from .length - 1 to 0.

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

Comments

1

Try this:

let data = [
    { id: 1, Name: "Abe", RowNumber: 1 },
    { id: 2, Name: "Bob", RowNumber: 2 },
    { id: 3, Name: "Clair", RowNumber: 3 },
    { id: 4, Name: "Don", RowNumber: 3.0 },
    { id: 5, Name: "Edna", RowNumber: 3.1 },
    { id: 6, Name: "Frank", RowNumber: 3.2 },
    { id: 7, Name: "Gabe", RowNumber: 4 },
    { id: 8, Name: "Helen", RowNumber: 5 },
    { id: 9, Name: "Isabelle", RowNumber: 6 },
    { id: 10, Name: "Jane", RowNumber: 7 },
    { id: 11, Name: "Ken", RowNumber: 8 },
];
for (let i = data.length - 1; i >= 0; i--) {
    console.log(data[i].Name);
}

Comments

1

You need to loop from length minus one until zero.

This approach take the check and decrementing in one expression.

let data = [
        { id: 1, Name: "Abe", RowNumber: 1 },
        { id: 2, Name: "Bob", RowNumber: 2 },
        { id: 3, Name: "Clair", RowNumber: 3 },
        { id: 4, Name: "Don", RowNumber: 3.0 },
        { id: 5, Name: "Edna", RowNumber: 3.1 },
        { id: 6, Name: "Frank", RowNumber: 3.2 },
        { id: 7, Name: "Gabe", RowNumber: 4 },
        { id: 8, Name: "Helen", RowNumber: 5 },
        { id: 9, Name: "Isabelle", RowNumber: 6 },
        { id: 10, Name: "Jane", RowNumber: 7 },
        { id: 11, Name: "Ken", RowNumber: 8 }],
    i = data.length;

while (i--) {
    console.log(data[i].Name);
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.