Home > Mobile >  How to exclude certain property from the list in NodeJS
How to exclude certain property from the list in NodeJS

Time:11-24

I'm having the below list and I would like to add only these property names PRODUCT_TYPE, PRODUCT_TERM, PRODUCT_ID in myProduct. I want to ignore rest of the properties - I've around 100 properties and want to filter only a few of them from myProduct

Please find my code below:

const obj = {
  myProduct: [
    {
      name: "PRODUCT_PRICE",
      value: "234.324",
    },

    {
      name: "PRODUCT_NAME",
      value: "Insurance",
    },
    {
      name: "PRODUCT_TYPE",
      value: "Life",
    },
    {
      name: "PRODUCT_TERM",
      value: "Long",
    },
    {
      name: "PRODUCT_ID",
      value: "AP3232343JKD",
    },
    {
      name: "PRODUCT_ENABLED",
      value: "TRUE",
    },
  ],
};

const allowedNames = [
  'PRODUCT_TYPE',
  'PRODUCT_TERM',
  'PRODUCT_ID'
];

const updateCertainProperties = {
  PRODUCT_ID: "app.productID",
  PRODUCT_ENABLED: "app.product.enabled"
};

const productName = "testProduct_3234dfasfdk3msldf23";
const environment = obj.myProduct.map((o) => {
  obj.myProduct.filter(product => allowedNames.includes(product.name));
  if (updateCertainProperties[o.name]) o.name = updateCertainProperties[o.name];
  if (o.name === "PRODUCT_NAME") o.value = productName;    
  return obj.myProduct;
  
});

console.log(obj.myProduct)

Expected output:

[
  { name: 'PRODUCT_NAME', value: 'testProduct_3234dfasfdk3msldf23' },
  { name: 'PRODUCT_TYPE', value: 'Life' },
  { name: 'PRODUCT_TERM', value: 'Long' },
  { name: 'app.productID', value: 'AP3232343JKD' },
  { name: 'app.product.enabled', value: 'TRUE' }
]

Can someone please help me how can I achieve this? Appreciated your help in advance!

CodePudding user response:

You can create an array of allowed names and filter them out using includes()

css just for prettier output

const obj = {
        myProduct: [
            {
                name: "PRODUCT_NAME",
                value: "Insurance",
            },
            {
                name: "PRODUCT_TYPE",
                value: "Life",
            },
            {
                name: "PRODUCT_TERM",
                value: "Long",
            },
            {
                name: "PRODUCT_ID",
                value: "AP3232343JKD",
            },
            {
                name: "PRODUCT_ENABLED",
                value: "TRUE",
            },
        ],
    };

    const allowedNames = [
        'PRODUCT_TYPE',
        'PRODUCT_TERM',
        'PRODUCT_ID'
    ];

    obj.myProduct = obj.myProduct.filter(product => allowedNames.includes(product.name));

    console.log(obj.myProduct);
.as-console-wrapper {
  max-height: unset !important;
  top: 0;
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

CodePudding user response:

It sounds like you're describing filtering an array, not "excluding properties". You have an array of objects, with each object consisting of a name property and value property. And you only want objects with specific values in their name property.

Using .filter on the array, it might look something like this:

obj.myProduct = obj.myProduct.filter(p => (
  p.name === 'PRODUCT_TYPE' ||
  p.name === 'PRODUCT_TERM' ||
  p.name === 'PRODUCT_ID'));

This would filter out all elements of the array which don't match the supplied condition.

  • Related