0

I have an array;

[
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""}
]

So, I want to remove elements if values is empty. If user added 2 referance info I want to get this data like this;

[
{pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
{pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
]

I'm used some methods but not working. This is the last try with reduce and $prerefData is have this array;

var arr = $prerefData.reduce((result, item) => {
    if (item.value != "") {
       result.push(item);
    }
    return result;
    }, []);
console.log(arr);
Kamil Kiełczewski
  • 85,173
  • 29
  • 368
  • 345
Noob Doez
  • 59
  • 6

5 Answers5

2

You can use Javascript Array filter method

Briefly Array.filter will loop over your array, and run the callback on each element:

  • If it returns true: Element is included in result
  • If it returns false: Element is filtered out

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let result = data.filter(function (item) {
  for(key in item) {
    if (item[key]) {
      // Means one of the object keys have values, include it in the result
      return true
    }
  }
})

console.log(result)
Ali Elkhateeb
  • 3,413
  • 4
  • 21
  • 39
1

try

data.filter(x=> Object.values(x).join(''));

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let r = data.filter(x=> Object.values(x).join(''));

console.log(r);
Kamil Kiełczewski
  • 85,173
  • 29
  • 368
  • 345
0

You can use filter, use Object.values to extract all values of individual objects.use every to check if all array values are not empty strings.

let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}];

let result = data.filter(o => Object.values(o).every(e => e.trim() !== ""));

console.log(result);

You can use some if you want to check at least one is not an empty string.

let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"not Empty","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}]

let result = data.filter(o => Object.values(o).some(e => e.trim() !== ""));

console.log(result);
Eddie
  • 26,593
  • 6
  • 36
  • 58
0

You should use the filter method:

let filtredArr = arr.filter(ele => ele.pre_ref_fullname && ele.pre_ref_position && ele.pre_ref_phone)

Since empty strings return false you don't need to add comparisons if this is the only case to filter out elements in the array.

0

Use filter with Object.values and every, and use trim to make sure it excludes whitespace:

const data = [{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"Name",pre_ref_position:"Job",pre_ref_phone:"Number"},{pre_ref_fullname:"Name2",pre_ref_position:"Job2",pre_ref_phone:"Number2"}];

const res = data.filter(e => Object.values(e).every(s => s.trim != ""));

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Jack Bashford
  • 43,180
  • 11
  • 50
  • 79