0

I have a array like this

  @track arrayvar =   [
      {"key":"Array1","value":["test1","test2","test3"],
      {"key":"Array2","value":["test4"]
    ]

suppose i select test1 , i want to remove it from arrayvar array

Below code i am trying it using filter function , but unable to remove the element

  handleRemove(eve) {
    console.log(eve.target.name)
    var removeSelected = eve.target.name;
    this.arrayvar = this.arrayvar.filter(
      item => item.value.filter(item3 =>  item3 !== removeSelected)
      );
    }
sfdc fox
  • 45
  • 3
  • What's `@track` and is your question related to that, specifically, or just arrays in general? – T.J. Crowder Aug 17 '21 at 14:29
  • You're not saving the result of your inner call to `filter`. Also, there's no reason to use `filter` for the outer array, you aren't removing any entries from it. Instead, use `forEach` or just a `for...of` loop: `for (const item of this.arrayvar) { item.value = item.value.filter(item3 => item3 !== removeSelected); }` – T.J. Crowder Aug 17 '21 at 14:32

2 Answers2

1

You have to assign the result after filtering back to item.value:

let arrayvar = [{
    "key": "Array1",
    "value": ["test1", "test2", "test3"]
  },
  {
    "key": "Array2",
    "value": ["test4"]
  }
]
let removeSelected = "test1";
this.arrayvar = arrayvar.filter(item => item.value = item.value.filter(item3 => item3 !== removeSelected));
console.log(arrayvar);
Spectric
  • 30,714
  • 6
  • 20
  • 43
0

There are n number of options.

If you want to create a new array from existing one useArray.map

const arrayvar = [
  {
    "key": "Array1",
    "value": ["test1", "test2", "test3"]
  },
  {
    "key": "Array2", "value": ["test4"]
  }
]

const selectedValue = "test1";
const output = arrayvar.map((node) => ({
  key: node.key,
  value: node.value.filter((item) => item !== selectedValue)
}))
console.log(output);

If you just want to modify the existing array Use Array.forEach

const arrayvar = [
  {
    "key": "Array1",
    "value": ["test1", "test2", "test3"]
  },
  {
    "key": "Array2", "value": ["test4"]
  }
]

const selectedValue = "test1";
arrayvar.forEach((node) => {
  node.value = node.value.filter((item) => item !== selectedValue);
})
console.log(arrayvar);
Nitheesh
  • 19,238
  • 3
  • 22
  • 49