Filter JSON by key value

114,145

Solution 1

You should use filter method.

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

Provided function is a callback which is applied to each element of the array.

var arr = [{"time":"2016-07-26 09:02:27","type":"aa"}, {"time":"2016-04-21 20:35:07","type":"ae"}, {"time":"2016-08-20 03:31:57","type":"ar"}, {"time":"2017-01-19 22:58:06","type":"ae"}, {"time":"2016-08-28 10:19:27","type":"ae"}, {"time":"2016-12-06 10:36:22","type":"ar"}, {"time":"2016-07-09 12:14:03","type":"ar"}, {"time":"2016-10-25 05:05:37","type":"ae"}, {"time":"2016-06-05 07:57:18","type":"ae"}, {"time":"2016-10-08 22:03:03","type":"aa"}, {"time":"2016-08-13 21:27:37","type":"ae"}, {"time":"2016-04-09 07:36:16","type":"ar"}, {"time":"2016-12-30 17:20:08","type":"aa"}, {"time":"2016-03-11 17:31:46","type":"aa"}, {"time":"2016-05-04 14:08:25","type":"ar"}, {"time":"2016-11-29 05:21:02","type":"ar"}, {"time":"2016-03-08 05:46:01","type":"ar"}, ];

console.log(arr.filter(function(item){
    return item.type == "ar";         
}));

Also, you can use a shorter way with arrow functions:

var filtered = arr.filter(a => a.type == "ar");

Solution 2

Using filter method you can filter the array to return only those elements which match a particular condition data.filter((x)=>x.type === "ar");

The filter method creates a new array with all elements that will pass the condition x.type === "ar"

var data =[{"time":"2016-07-26 09:02:27","type":"aa"},
{"time":"2016-04-21 20:35:07","type":"ae"},
{"time":"2016-08-20 03:31:57","type":"ar"},
{"time":"2017-01-19 22:58:06","type":"ae"},
{"time":"2016-08-28 10:19:27","type":"ae"},
{"time":"2016-12-06 10:36:22","type":"ar"},
{"time":"2016-07-09 12:14:03","type":"ar"},
{"time":"2016-10-25 05:05:37","type":"ae"},
{"time":"2016-06-05 07:57:18","type":"ae"},
{"time":"2016-10-08 22:03:03","type":"aa"},
{"time":"2016-08-13 21:27:37","type":"ae"},
{"time":"2016-04-09 07:36:16","type":"ar"},
{"time":"2016-12-30 17:20:08","type":"aa"},
{"time":"2016-03-11 17:31:46","type":"aa"},
{"time":"2016-05-04 14:08:25","type":"ar"},
{"time":"2016-11-29 05:21:02","type":"ar"},
{"time":"2016-03-08 05:46:01","type":"ar"},
];
           
var result = data.filter((x)=>x.type === "ar");
console.log(result);

Solution 3

You could use filter function. Check browser support first:

var result = a.filter(function(v){
    return v.type==='ar';
})

Hope this helps.

var list = [
  {"time":"2016-07-26 09:02:27","type":"aa"},
  {"time":"2016-04-21 20:35:07","type":"ae"},
  {"time":"2016-08-20 03:31:57","type":"ar"},
  {"time":"2017-01-19 22:58:06","type":"ae"},
  {"time":"2016-08-28 10:19:27","type":"ae"},
  {"time":"2016-12-06 10:36:22","type":"ar"},
  {"time":"2016-07-09 12:14:03","type":"ar"},
  {"time":"2016-10-25 05:05:37","type":"ae"},
  {"time":"2016-06-05 07:57:18","type":"ae"},
  {"time":"2016-10-08 22:03:03","type":"aa"},
  {"time":"2016-08-13 21:27:37","type":"ae"},
  {"time":"2016-04-09 07:36:16","type":"ar"},
  {"time":"2016-12-30 17:20:08","type":"aa"},
  {"time":"2016-03-11 17:31:46","type":"aa"},
  {"time":"2016-05-04 14:08:25","type":"ar"},
  {"time":"2016-11-29 05:21:02","type":"ar"},
  {"time":"2016-03-08 05:4601","type":"ar"},
];

var result = list.filter(function(obj, index){
  return obj.type==='ar';
})

console.log(result);
Share:
114,145
JordanBarber
Author by

JordanBarber

I am a UI Developer and Designer focused on modern javascript frameworks. Most recently, I have been using Angular (2+) for the past two and a half years, but I also have experience with React, Vue and Aurelia. I strive in a team environment in which I can work with others to turn ideas and designs into highly usable experiences. I have expert experience with Javascript, Angular, Aurelia, Git, HTML, CSS/SASS, Wordpress, Drupal, Webpack, NPM, Adobe Illustrator and Sketch. Always striving to learn more.

Updated on April 23, 2021

Comments

  • JordanBarber
    JordanBarber about 3 years

    I have the following JSON and I want to keep the array in the same format but only include objects with type "ar". How can I filter this JSON with JavaScript to only include the types I need?

    [{"time":"2016-07-26 09:02:27","type":"aa"},
    {"time":"2016-04-21 20:35:07","type":"ae"},
    {"time":"2016-08-20 03:31:57","type":"ar"},
    {"time":"2017-01-19 22:58:06","type":"ae"},
    {"time":"2016-08-28 10:19:27","type":"ae"},
    {"time":"2016-12-06 10:36:22","type":"ar"},
    {"time":"2016-07-09 12:14:03","type":"ar"},
    {"time":"2016-10-25 05:05:37","type":"ae"},
    {"time":"2016-06-05 07:57:18","type":"ae"},
    {"time":"2016-10-08 22:03:03","type":"aa"},
    {"time":"2016-08-13 21:27:37","type":"ae"},
    {"time":"2016-04-09 07:36:16","type":"ar"},
    {"time":"2016-12-30 17:20:08","type":"aa"},
    {"time":"2016-03-11 17:31:46","type":"aa"},
    {"time":"2016-05-04 14:08:25","type":"ar"},
    {"time":"2016-11-29 05:21:02","type":"ar"},
    {"time":"2016-03-08 05:46:01","type":"ar"},
    ]
    
  • devops_engineer
    devops_engineer almost 6 years
    If I have to filter out based on type as well as latest timestamp, can you please suggest as to how can it be done?
  • Mihai Alexandru-Ionut
    Mihai Alexandru-Ionut almost 6 years
    @iOS_programmer, do you need to filter by two fields ?
  • devops_engineer
    devops_engineer almost 6 years
    Yes.. for example in the above json... I would want the type ''ar" which has the latest timestamp.. It would be really appreciated if you can let me know how to filter latest timestamp along with type.
  • Amino
    Amino about 3 years
    Thank you, saved my time