Home > Software engineering >  How to return only non-null values ​of object properties in an object array?
How to return only non-null values ​of object properties in an object array?

Time:01-02

I want to receive a single object array and return only the non-null values ​​in the object arrays.

However, the method I have implemented contains non-null properties in an array and returns them as an array. How can I make it easier?

I want it to be returned as an object, not as an array.

const arr = [{
text01 : 'name',
text02 : '[email protected]',
text03 : '010-1234-5678',
text04 : 'adress1',
text05 : 'adress2',
text06 : null,
text07 : null,
text08 : null,
},
{
text01 : 'name1',
text02 : '[email protected]',
text03 : '010-1255-5148',
text04 : 'adress3',
text05 : 'adress4',
text06 : null,
text07 : null,
text08 : null,
}]    
getDataArr(arr) {
            arr.forEach(item => {
                const aaa = [];
                for (let key in item) {
                    if (item[key] !== null) {
                        const value = item[key];
                        aaa.push({ key, value });
                    }
                }
                console.log(aaa);
            });

        // Get the value as const arr = [{
text01 : 'name',
text02 : '[email protected]',
text03 : '010-1234-5678',
text04 : 'adress1',
text05 : 'adress2',
},
{
text01 : 'name1',
text02 : '[email protected]',
text03 : '010-1255-5148',
text04 : 'adress3',
text05 : 'adress4',
}]    
        },

CodePudding user response:

You could filter empty objects, undefined and null values from an array of objects like this:

const data = [
  {name: "joe", age:99},
  {name: "jack", age:8},
  undefined,
  {name: "lola", age:54},
  {},
  null
]

function getValidArray(arr){
  return arr.filter(obj=> {
    if(!!obj && typeof obj === "object"){
      return Object.keys(obj).length > 0
    }
    return !!obj
  })
}

console.log(getValidArray(data))

CodePudding user response:

You can easily achieve the result using filter and map as a single-liner:

arr.map((obj) =>
  Object.fromEntries(Object.entries(obj).filter(([k, v]) => v !== null))
);

const arr = [
  {
    text01: 'name',
    text02: '[email protected]',
    text03: '010-1234-5678',
    text04: 'adress1',
    text05: 'adress2',
    text06: null,
    text07: null,
    text08: null,
  },
  {
    text01: 'name1',
    text02: '[email protected]',
    text03: '010-1255-5148',
    text04: 'adress3',
    text05: 'adress4',
    text06: null,
    text07: null,
    text08: null,
  },
];

const result = arr.map((obj) => Object.fromEntries(Object.entries(obj).filter(([k, v]) => v !== null)));

console.log(result);
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }

  • Related