Antoni Kępiński
Antoni Kępiński

Reputation: 446

How to show specific JSON data using filter or other JS method (by attribute)

Here is my JSON from an API request:

[ { name: 'PM1', value: 21.51, key: 'PM1' },
{ name: 'PM25', value: 35.08, key: 'PM25' },
{ name: 'PM10', value: 54.85, key: 'PM10' },
{ name: 'PRESSURE', value: 1021.45, key: 'PRESSURE' },
{ name: 'HUMIDITY', value: 97, key: 'HUMIDITY' },
{ name: 'TEMPERATURE', value: 10.4, key: 'TEMPERATURE' } ]

I want to remove the last 3 objects (TEMPERATURE, PRESSURE and HUMIDITY), so it would look like this:

[ { name: 'PM1', value: 21.51, key: 'PM1' },
{ name: 'PM25', value: 35.08, key: 'PM25' },
{ name: 'PM10', value: 54.85, key: 'PM10' } ]

The question is - what should I do? Using slice() is not a good option since sometimes objects might not be the same, for example, there might be no TEMPERATURE or PRESSURE. I hope I made myself clear. In case you asked, this data is going to be displayed to the user in a CLI app ;)

Upvotes: 2

Views: 57

Answers (2)

Paul Fitzgerald
Paul Fitzgerald

Reputation: 12129

You can use filter and check the index. The snippet below will remove the last three items, as I believe this is what you want.

const data = [ 
{ name: 'PM1', value: 21.51, key: 'PM1' },
{ name: 'PM25', value: 35.08, key: 'PM25' },
{ name: 'PM10', value: 54.85, key: 'PM10' },
{ name: 'PRESSURE', value: 1021.45, key: 'PRESSURE' },
{ name: 'HUMIDITY', value: 97, key: 'HUMIDITY' },
{ name: 'TEMPERATURE', value: 10.4, key: 'TEMPERATURE' } 
]

const newData = data.filter((item, index) => {
  if(index < data.length - 3) {
    return item;
  }
})

console.log(newData);

If you want to always keep PM1, PM25 and PM10 use the following:

const data = [ 
{ name: 'PM1', value: 21.51, key: 'PM1' },
{ name: 'PM25', value: 35.08, key: 'PM25' },
{ name: 'PM10', value: 54.85, key: 'PM10' },
{ name: 'PRESSURE', value: 1021.45, key: 'PRESSURE' },
{ name: 'HUMIDITY', value: 97, key: 'HUMIDITY' },
{ name: 'TEMPERATURE', value: 10.4, key: 'TEMPERATURE' } 
]

newData = data.filter(item => (
  item.name == 'PM1' || item.name =='PM25' || item.name == 'PM10'
));

console.log(newData);

Upvotes: 2

slider
slider

Reputation: 12990

You can use filter to exclude items whose names are not in ['TEMPERATURE', 'HUMIDITY', 'PRESSURE']:

var data = [{ name: 'PM1', value: 21.51, key: 'PM1' },
            { name: 'PM25', value: 35.08, key: 'PM25' },
            { name: 'PM10', value: 54.85, key: 'PM10' },
            { name: 'PRESSURE', value: 1021.45, key: 'PRESSURE' },
            { name: 'HUMIDITY', value: 97, key: 'HUMIDITY' },
            { name: 'TEMPERATURE', value: 10.4, key: 'TEMPERATURE' }];

console.log(data.filter(d => !['TEMPERATURE', 'HUMIDITY', 'PRESSURE'].includes(d.name)));

Upvotes: 2

Related Questions