i have below array of object from API response.i want to push only those object whose id is not repeating and totalTime is 0
for ex - in below JSON, object with id = 4 is repeating twice so i dont want to include this object into new array, here id = 1 and id = 3 have totaltime is 0, than i want to push this one .
Below is my JSON
const response = [
{
"id": "1",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "2",
"oeeCalculations": {
"others": {
"totalTime": 744
}
}
},
{
"id": "3",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "4",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "4",
"oeeCalculations": {
"others": {
"totalTime": 744
}
}
}
];
Expected output -
const newResponse = [
{
"id": "1",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "3",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
}
];
I tried below code, but its returning unique lines only..
const values = Object.values(
response.reduce((a, b) => {
if (!a[b.id]) a[b.id] = b
return a
}, {})
)
Here is another way to achieve the desired result:
map()
functionfilter()
function, with the help of the previously created ids
listtotalTime
other than 0
using the filter()
functionconst ids = response.map(item => item.id);
const result = response
.filter(item => ids.filter(id => id === item.id).length === 1)
.filter(item => item.oeeCalculations.others.totalTime === 0);
Demo:
const response = [
{
"id": "1",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "2",
"oeeCalculations": {
"others": {
"totalTime": 744
}
}
},
{
"id": "3",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "4",
"oeeCalculations": {
"others": {
"totalTime": 0
}
}
},
{
"id": "4",
"oeeCalculations": {
"others": {
"totalTime": 744
}
}
}
];
const ids = response.map(item => item.id);
const result = response
.filter(item => ids.filter(id => id === item.id).length === 1)
.filter(item => item.oeeCalculations.others.totalTime === 0);
console.log(result);