Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to remove object if all values are empty in javascript?

I have multiple objects in array. It has values array with value property in object. when all value properties are empty. I want to remove whole object.

I tried it but i am not able to produce output. Please help me.

var data = [
  {
    "field": "surname",
    "values": [
      {
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "given names",
    "values": [
      {
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "date of birth",
    "values": [
      {
        "id": "drivingLicenseFront",
        "value": "25.07.1974",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "05 JUN /JOIN 57",
        "isAvailable": true
      }
    ],
    "status": "passed"
  }
];

 for (let x = data.length-1; x >= 0; x--) {
            let count = 1;
            var dataValueLength = data[x].values.length;
            for (let y = 0; y < data[x].values.length; y++) {
                if (data[x].values[y].value === "") {
                    count++;
                }
            }
            if (dataValueLength == count) {
                data.splice(x, 1)
            }
        }
        
        console.log(JSON.stringify(data));

In above scenario, output should be only one object that is "date of birth".

like image 880
CodeHunter Avatar asked Aug 02 '26 10:08

CodeHunter


2 Answers

Very close, just one issue (you are initializing count to 1 instead of 0), make it

let count = 0;

Demo

var data = [{
    "field": "surname",
    "values": [{
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "given names",
    "values": [{
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "date of birth",
    "values": [{
        "id": "drivingLicenseFront",
        "value": "25.07.1974",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "05 JUN /JOIN 57",
        "isAvailable": true
      }
    ],
    "status": "passed"
  }
];

for (let x = data.length - 1; x >= 0; x--) {
  let count = 0; //Observe change in this line 
  var dataValueLength = data[x].values.length;
  for (let y = 0; y < data[x].values.length; y++) {
    if (data[x].values[y].value === "") {
      count++;
    }
  }
  if (dataValueLength == count) {
    data.splice(x, 1)
  }
}

console.log(JSON.stringify(data));
like image 106
gurvinder372 Avatar answered Aug 03 '26 22:08

gurvinder372


You can use reduce to filter out the items with no values

var data = [
  {
    "field": "surname",
    "values": [
      {
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "given names",
    "values": [
      {
        "id": "drivingLicenseFront",
        "value": "",
        "isAvailable": true
      },
      {
        "id": "passport",
        "value": "",
        "isAvailable": true
      }
    ],
    "status": "passed"
  },
  {
    "field": "date of birth",
    "values": [     
    ],
    "status": "passed"
  }
];

var result = data.reduce(function(p,c){
    if(c.values && c.values.length > 0)
        p.push(c);
    return p;
},[]);

console.log(result);
like image 43
Jamiec Avatar answered Aug 04 '26 00:08

Jamiec