Изменение нумерации в упорядоченном списке, чтобы изменить процент - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь присвоить процент совпадения в 90% для каждого из результатов поиска.

Есть ли способы написать функцию на Python или создать некоторый код Javascript, который бы автоматически назначал случайное значение от 100 до 0% (в обратном порядке) для каждого элемента в упорядоченном списке (которые являются моими результатами поиска) ) в соответствии с порядком списка по умолчанию (1,2,3,4 ..).

Единственная проблема в том, что я не знаю точное количество результатов, которые будут отображаться, поскольку все запросы могут отличаться, и я использую Elasticsearch в качестве индекса.

Быстрый пример HTML:

<div>
{% if  page_obj.object_list %}
      <ol class="row top20">

        {% for result in page_obj.object_list %}

     <li class="list-item">
      <div class="showcase col-sm-6 col-md-4">
           <a href="{{ result.object.get_absolute_url }}">
              <h3>{{result.object.title}}</h3>
              <img src="{{ result.object.image }}" class="img-responsive">
           </a>
      </div>
     <li>

         {% endfor %}
      </ol>
</div>

{% else %}
        <p> Sorry, no result found </p>
{% endif %}

Теперь окончательные ожидаемые результаты должны выглядеть примерно так:

- Title 1
  image...
  *100% Match*  <-- Random % Value based on the order -->

- Title 2
  image...
  *92% Match*

- Title 3
  image...
  *85% Match*

- Title 4
  image...
  *56% Match*

Я буквально открыт для любых решений на данный момент.

Как я могу это сделать?

1 Ответ

0 голосов
/ 07 мая 2019

Это простая функция с циклом, которая возвращает случайное число между нижними диапазонами на каждой итерации, пока не достигнет точки, где она станет равной нулю:

const data = [
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
    { title: "foo" },
]

let index = 0;
let results = [];
const randomSearchMatchPercentages = ( array ) => {
    for ( const element of array ) {
        // define a maximum and a minimum range
        const maximum = index <= 100 ? 100 - index : 0;
        const minimum = maximum > 0 ? maximum - 5 : 0;
	
        element.match = Math.round( Math.random() * ( maximum - minimum ) + minimum ) + "%";
        results.push( element );

        // decrease the maximum and minimum for the next iteration
        index += 5;
    }
console.log( results );
}

randomSearchMatchPercentages( data );
...