3

I have problem with get string in JSON data. Format as below:

[
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "id": "David",
    "last": "25"
  },
  {
    "id": "John",
    "last": "30"
  }
]

Sometime it changes position together, John from 3rd place go to 2nd place:

[
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "name": "John",
    "age": "30"
  },
  {
    "name": "David",
    "age": "25"
  }
]

If i use data[3].age to get John's age, and data change position, I will get David's age.

Is there any method I can use to find the object with name David and get the age value?

Hieu Nguyen
  • 59
  • 1
  • 1
  • 5
  • 8
    Possible duplicate of [Find object by id in an array of JavaScript objects](https://stackoverflow.com/questions/7364150/find-object-by-id-in-an-array-of-javascript-objects) – Mark May 06 '18 at 06:12
  • `data[3].age` will give you an index error. –  May 06 '18 at 08:41

2 Answers2

7

You can use array.find() method as,

var myArray = [
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "name": "John",
    "age": "30"
  },
  {
    "name": "David",
    "age": "25"
  }
];

//Here you are passing the parameter name and getting the age 
//Find will get you the first matching object
var result = myArray.find(t=>t.name ==='John').age;
console.log(result);
Sajeetharan
  • 216,225
  • 63
  • 350
  • 396
5

It's better to use array.filter() (better browser support)

myArray.filter(function(el){return el.name == "John"})[0].age
Firemen26
  • 1,025
  • 12
  • 21
  • 1
    Although `Array.filter` has better browser support than `Array.find`, I'd like to point out that `find` will return when it finds a match, whereas `filter` will go through every item in the array. So, it will perform worse if the array is large. In those cases, regular `for` loop with `break` statements should be preferred. – xyres May 02 '21 at 18:07