Jerin
Jerin

Reputation: 736

how can remove array of object element without slice, splice

I am trying to delete a single object from the below object of arrays. I have tried with slice but sometimes it doesn't work. That's why I want to try different methods.

{
  id: "6252de4b27082fd83b94e3f4",
  options: [
    { title: "extra Tomato", price: 2 },
    { title: "ketchup", price: 1 },
    { title: "medium", price: 3 },
  ],
  price: 5.1,
  quantity: 1,
  title: "Carroll Montgomery",
}

suppose I want to delete medium object my expected output would be:

{
  id: "6252de4b27082fd83b94e3f4",
  options: [
    { title: "extra Tomato", price: 2 },
    { title: "ketchup", price: 1 },
  ],
  price: 5.1,
  quantity: 1,
  title: "Carroll Montgomery",
}

Upvotes: 0

Views: 336

Answers (4)

Hacı Celal Aygar
Hacı Celal Aygar

Reputation: 518

You can use arrays.filter(....) to remove item from array

obj.options = obj.options.filter((data) => data.title !== 'medium' || data.title !== 'ketchup')
console.log(obj)

Upvotes: 1

Andy
Andy

Reputation: 63550

filter out the item you don't want.

const obj = {
  id: '6252de4b27082fd83b94e3f4',
  options: [
    {title: 'extra Tomato', price: 2},
    {title: 'ketchup', price: 1},
    {title: 'medium', price: 3}
  ],
  price: 5.1,
  quantity: 1,
  title: 'Carroll Montgomery'
};

function removeItem(obj, item) {

  // Destructure the options from the object
  const {options, ...rest } = obj;

  // Return a new object with a filtered
  // array of options
  return {
    ...rest,
    options: options.filter(el => {
      return el.title !== item;
    })
  };

}

console.log(removeItem(obj, 'medium'));

Upvotes: 1

Noa
Noa

Reputation: 1216

Here you should just write custom slice function;

var data = {id: "6252de4b27082fd83b94e3f4",
options: [
{title: 'extra Tomato', price: 2},
{title: 'ketchup', price: 1},
{title: 'medium', price: 3}],
price: 5.1,
quantity: 1,
title: "Carroll Montgomery"};

data["options"] = data.options.filter(function(value, index, arr){ 
    return value.title != "medium";
});

console.log(data);

Upvotes: 1

samuellawrentz
samuellawrentz

Reputation: 1732

You can try using the Array.filter method. Just provide the title you want to delete and you would get the deleted array. Doing so, we don't mutate the original array, instead we create a new one with the value removed.

const obj = {
  id: '6252de4b27082fd83b94e3f4',
  options: [
    { title: 'extra Tomato', price: 2 },
    { title: 'ketchup', price: 1 },
    { title: 'medium', price: 3 },
  ],
  price: 5.1,
  quantity: 1,
  title: 'Carroll Montgomery',
}

obj.options = obj.options.filter((item) => item.title !== 'medium')
console.log(obj)

Upvotes: 4

Related Questions