Как был бы Вы удалять элементы станд.:: вектор на основе некоторого свойства элементов?

Каждая из ваших анонимных функций должна возвращать строку, и, поскольку они используют .map, вам нужно использовать .join('') для преобразования из массива в строку.

См. Пример ниже:

let providerList = [
  {
    id: "1",
    name:"fund",
    description: "Raising Funds"
  },
  {
    id: "2",
    name: "transfer",
    description: "transfering money"
  }
];

let query = [
  { 
    value: "200", country:"SG"
  }
]

let holder = document.querySelector('.holder');
holder.innerHTML = providerList.map(
  function (provider) {
    return query.map(
      function (query) {
        return `
<div class="card mb-4" style="box-shadow: 0 0 10px rgba(0, 0, 0, 0.28);border: none">
  <div class="card-body p-0">
    <div class="row m-2">
      <div class="col-sm-4">   
          <p>${provider.name} ${query.value}</p>
      </div>
    </div>
   </div>
</div>`;
      }
    ).join('');
  }
).join('');
<div class="holder"></div>

Да, я удалил LITism кода, но это должен показать вам, как это работает, а затем вы можете вернуть это в свою функцию render.

5
задан Ernst Hot 14 March 2009 в 07:42
поделиться

2 ответа

Я предпочитаю remove_if

v.erase(remove_if(v.begin(), v.end(), 
                 mem_fun_ref(&MyClass::isTiredOfLife)), 
        v.end());

remove_if возвращает итератор, указывающий после последнего элемента, это находится все еще в последовательности. erase стирает все от его первого до его последнего аргумента (оба итератора).

21
ответ дан 18 December 2019 в 06:04
поделиться

Используя remove_if "правильный" способ сделать это. Бойтесь использовать итератор для циклического повторения через и стирание, потому что удаление объектов делает недействительным итератор. На самом деле любым примером, который использует стирание () как его основной метод, является плохая идея о векторах, потому что стирание является O (n), который сделает Ваш алгоритм O (n^2). Это должно быть O (n) алгоритм.

Метод, который я даю ниже, вероятно, будет быстрее, чем remove_if, но, в отличие от remove_if, НЕ сохранит относительный порядок элементов. Если Вы заботитесь о поддержании порядка (т.е. Ваш вектор отсортирован), используйте remove_if, как в ответе выше. Если Вы не будете заботиться о порядке, и если количество объектов, которые будут удалены, обычно будет меньше чем четвертью вектора, то этот метод, вероятно, будет быстрее:

for( size_t i = 0; i < vec.size(); )
   if( vec[i].isTiredOfLife() )
   {
      vec[i] = vec.back();
      vec.pop_back();
   }
   else
      ++i;
6
ответ дан 18 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

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