@Alisa94

Как удалить повторяющиеся элементы из объекта?

Доброе утро. У меня есть такая проблема. Есть массив, в котором содержатся объекты, а этих объектах перечислены свойства. Мне нужно удалить одно из повторяющихся свойств. В итоге я должен получить список этих свойств в контейнере на html странице. Ниже приведу массив с объектами.

0:
building: ""
category: "Walls"
family: "Basic Wall"
level: ""
revitid: "281899"
room: ""
symbol: "Wall-Ext_102Bwk-75Ins-100LBlk-12P"
viewid: 3300
__proto__: Object
1:
building: ""
category: "Walls"
family: "Basic Wall"
level: ""
revitid: "282264"
room: ""
symbol: "Wall-Ext_102Bwk-75Ins-250LBlk-12P 2"
viewid: 3304
__proto__: Object
length: 2
__proto__: Array(0)


Т.е. из массива с объектами я должен удалить у второго объекта свойство category: "Walls", family: "Basic Wall" и, в добавок, symbol: "Wall-Ext_102Bwk-75Ins-250LBlk-12P 2"(хотя последнее свойство у них разное)

В итоге из этого массива нужно сгенерировать на html странице такой список
<ul><li>Walls</li> <!-- Category -->
  <ul><li>Basic Wall</li> <!-- family -->
    <ul><li>Wall-Ext_102Bwk-75Ins-102LBlk-12P</li> <!--symbol -->
      <ul><li>Basic Wall ["281899"]</li> <!-- family + revitid -->
      <li>Basic Wall ["282264"]</li></ul> <!-- family + revitid -->
    </ul>
  </ul>
</ul>


У меня есть код для этого, но он очень костыльный и плохой, ниже приведу свой код.

newData.forEach(e => {
    // console.log(e['category']);
    if (e['category'] === e['category']) {
      delete newData[1].category;
    };
    if (e['symbol'] === e.symbol) {
      delete newData[1].symbol;
    };
    if(e.family === e.family) {
      delete newData[1].family;
    }
  });
  console.log(newData);
  newData.forEach(el => {
    html += '';
    if (el.category !== undefined) {
      html += `<li>${el['category']}</li>`;
    };
    if (el.family !== undefined) {
      html += `<ul><li>${el['family']}</li>`;
    };
    if (el.symbol !== undefined) {
      html += `<li>${el['symbol']}</li>`;
    };
    if (el.family !== undefined) {
      html += `<li>${el['family']} ${el['revitid']}</li>`;
    } else {
      newData[1].family = newData[0].family;
      html += `${el['family']} ${el['revitid']}</li>`;
    }
    html += '</ul>';
  })
  document.getElementById('differencesDiv').innerHTML = html;


Очень надеюсь на вашу помощь, буду очень благодарен.
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
@StockholmSyndrome
как уже сказали, лучше сгруппировать по свойствам, но если не хочется, то…
https://jsfiddle.net/ahzj9nqf/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@medin84
software developer
Предлагаю другой путь.
Сперва сгруппировать по нужным полям.
И имея дерево будет проще отрисовать.
https://codesandbox.io/s/50y3y7ly8k

[
  {
    "title": "Walls",
    "children": [
      {
        "title": "Basic Wall",
        "children": [
         .....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы