Search code examples
javascriptarrayslodash

Find and remove inner array values in javascript


I have one nested array. I need to find and remove from inner array values.

mainArray = [
        {
            name:"name1",
            idArray:["1", "2", "3"]
        }
        {
            name:"name1",
            idArray:["1", "2", "3", "5", "2"]
        }
        {
            name:"name1",
            idArray:["1", "2", "3", "4"]
        }
    ]

I need a answer like below:

mainArray = [
        {
            name:"name1",
            idArray:["1", "3"]
        }
        {
            name:"name1",
            idArray:["1", "3", "5"]
        }
        {
            name:"name1",
            idArray:["1", "3", "4"]
        }
    ]

That mean I want remove values from idArray which is id as "2". Can you give me a answer from lodas, it's more comfort.


Solution

  • You can map to loop thru the array. Clone each element and use filter the idArray

    let mainArray = [{
        name: "name1",
        idArray: ["1", "2", "3"]
      },
      {
        name: "name1",
        idArray: ["1", "2", "3", "5", "2"]
      },
      {
        name: "name1",
        idArray: ["1", "2", "3", "4"]
      }
    ];
    
    let toRemove = '2';
    
    let result = mainArray.map(o => {
      o = Object.assign({}, o); //To clone the obj. Will not affect the original array
      o.idArray = o.idArray.filter(v => v !== toRemove);
      return o;
    });
    
    console.log(result);


    Add reduce to remove the empty idArray

    let mainArray = [{
        name: "name1",
        idArray: ["1", "2", "3"]
      },
      {
        name: "name1",
        idArray: ["1", "2", "3", "5", "2"]
      },
      {
        name: "name-removed",
        idArray: ["2"]
      },
      {
        name: "name1",
        idArray: ["1", "2", "3", "4"]
      },
      {
        name: "name-removed",
        idArray: []
      }
    ];
    
    let toRemove = '2';
    
    let result = mainArray.reduce((c, o) => {
      o = Object.assign({}, o);
      o.idArray = o.idArray.filter(v => v !== toRemove);
      if (o.idArray.length) c.push(o);
      return c;
    }, []);
    
    console.log(result);