Javascript -Как удалить элемент из вложенного объекта? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь удалить элемент из вложенного объекта. объект под названием «категории», который содержит несколько категорий, и каждая категория имеет несколько предприятий. что-то вроде нижнего объекта:

let categories = [{
  name: 'Home',
  biz: [{
    name: 'Business 1',
    id: 50
  }, {
    name: 'Business 2',
    id: 52
  }, {
    name: 'Business n',
    id: 53
  }]
}, {
  name: 'Car',
  biz: [{
    name: 'Business 1',
    id: 62
  }, {
    name: 'Business 2',
    id: 66
  }, {
    name: 'Business n',
    id: 67
  }]
}];

То, что я пытаюсь сделать, - это удалить один из этих предприятий, выбранных пользователем, и вернуть весь объект без изменения исходного состояния.

До сих пор я делал что-то вроде ниже, и это работает нормально, но я не уверен, правильно ли я это делаю или неправильно. Я благодарен, если вы, ребята, поможете мне путем проверки или рефакторинга этого кода:

categories.map((cat, inedx) => {
  return { ...cat, biz: [...cat.biz.filter(bz => bz.id!== 66)]}
});

Ответы [ 2 ]

0 голосов
/ 06 января 2019

уменьшить на помощь: -)

const fn = (categories, id) => {
  return categories.reduce((r, x) => {
    return r.concat({ ...x, biz: x.biz.filter(x => x.id !== id) });
  }, []);
}

console.log(fn(categories, 66));
0 голосов
/ 06 января 2019

    let categories = [{
        name: 'Home',
        biz: [{
            name: 'Business 1',
            id: 50
        }, {
            name: 'Business 2',
            id: 52
        }, {
            name: 'Business n',
            id: 53
        }]
    }, {
        name: 'Car',
        biz: [{
            name: 'Business 1',
            id: 62
        }, {
            name: 'Business 2',
            id: 66
        }, {
            name: 'Business n',
            id: 67
        }]
    }];

categories.forEach(el => el.biz = el.biz.filter(e => e.id !== 66));

    console.log("removed  biz 66", categories)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...