Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.12.2019, 23:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от vandalv
30 фактур по найбольшей стоимости продажи отсортированных относительно даты.
условно
bases.sort((a,b)=> a.total - b.total).slice(0,30)


Сообщение от vandalv
Сортировка из заданного периода по стоимости продажи
нужна дата
base.data = randomDate() и тогда
bases.filter(a => a.data < data2 && a.data > data1).sort((a,b)=> a.total - b.total)

Сообщение от vandalv
Все фактуры в которых есть определенный продукт.
base.produkt тогда нужен массив обьектов а не строка
bases.filter(base => base.produkt.some(el  => el.name == 'Banana')

Последний раз редактировалось рони, 08.12.2019 в 23:54.
Ответить с цитированием
  #12 (permalink)  
Старый 08.12.2019, 23:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от рони
нужен массив обьектов
base.total = 0;
  base.produkt = Array.from({length : 10}, _ => {
  var num = randomValueBetween(100, 999)|0,
      name = getElem(vegString),
      price = randomValueBetween(1, 100).toFixed(2),
      count = randomValueBetween(1, 100)|0;
      base.total += price * count;
      return {num, name, price, count}
  });
Ответить с цитированием
  #13 (permalink)  
Старый 09.12.2019, 00:41
Интересующийся
Отправить личное сообщение для vandalv Посмотреть профиль Найти все сообщения от vandalv
 
Регистрация: 08.12.2019
Сообщений: 19

Не могли бы вы показать это в коде? Очень туго идет. Заранее благодарен!
Ответить с цитированием
  #14 (permalink)  
Старый 09.12.2019, 01:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от vandalv
Не могли бы вы показать это в коде?
???
что показать?
Ответить с цитированием
  #15 (permalink)  
Старый 09.12.2019, 01:26
Интересующийся
Отправить личное сообщение для vandalv Посмотреть профиль Найти все сообщения от vandalv
 
Регистрация: 08.12.2019
Сообщений: 19

Ну допустим bases.sort() по какому полю сортировать будет?
Ответить с цитированием
  #16 (permalink)  
Старый 09.12.2019, 01:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vandalv,
ни по какому, так сортируют только строки, у вас обьекты, нужна функция, примеры выше пост#11.
Ответить с цитированием
  #17 (permalink)  
Старый 09.12.2019, 02:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vandalv,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"></script>
    <style>
        table {
            border-collapse: collapse;
        }

        td {
            border: 1px solid gray;
            padding: 2px 5px;
            text-align: center;
        }
    </style>
</head>

<body>

    <div id="grid-holder"></div>

    <script type="text/template" id="grid-template">
        <table>
            <thead>
                <tr>
                    <th>№</th>
                    <th>сумма</th>
                    <th>продукты</th>
                </tr>
            </thead>
            <tbody>
                <% for(var i = 0; i < list.length; i++) { %>
                    <tr><td>
                            <%=i + 1%>
                        </td>
                        <td>
                            <%=list[i].total%>
                        </td>
                        <td><ul>
                        <% for(var k = 0; k < list[i].produkt.length; k++) { %>
                        <li>
                            <%=list[i].produkt[k].name%>
                         </li>
                        <% } %>
                            </ul>
                        </td>
                    </tr>
                    <% } %>
            </tbody>
        </table>
    </script>

    <script>
function randomValueBetween(min, max) {
        return Math.random() * (max - min) + min;
}
function randomDate(date1 = '01-01-2017', date2 = new Date().toLocaleDateString()) {
    date1 = new Date(date1).getTime();
    date2 = new Date(date2).getTime();
    return new Date(randomValueBetween(date2, date1)).toLocaleDateString()
}
function getElem(arr)
{
    return arr[randomValueBetween(0, arr.length)|0]
}
var vegString=["Apple","Apricots","Avocado","Banana","Blackberries"];
    var bases = Array.from({length : 10}, _ => {
    var total = 0,
    produkt = Array.from({length : 5}, _ => {
    var num = randomValueBetween(100, 999)|0,
            name = getElem(vegString),
            price = randomValueBetween(1, 100).toFixed(2),
            count = randomValueBetween(1, 100)|0;
            total += price * count;
            return {num, name, price, count}
    });
    total = total.toFixed(2);
    return {total, produkt}
    })




        var tmpl = document.getElementById('grid-template').innerHTML.trim();
        tmpl = _.template(tmpl);


        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: bases
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>5  фактур по найбольшей стоимости</h1>');
        var sortTotal = bases.sort((a,b)=> a.total - b.total).slice(-5);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: sortTotal
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>фактуры по возрастанию стоимости, в которых есть Avocado</h1>');
        var filterAvocadoSortTotal = bases.filter(base => base.produkt.some(el  => el.name == 'Avocado')).sort((a,b)=> a.total - b.total);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: filterAvocadoSortTotal
        }));

    </script>

</body>

</html>
Ответить с цитированием
  #18 (permalink)  
Старый 09.12.2019, 02:32
Интересующийся
Отправить личное сообщение для vandalv Посмотреть профиль Найти все сообщения от vandalv
 
Регистрация: 08.12.2019
Сообщений: 19

Сортировка по стоимости отлично работает. Но с датой, если задавать randomDate() получается случайная одинаковая дата для всех фактур.
Ответить с цитированием
  #19 (permalink)  
Старый 09.12.2019, 02:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

фильтрация сортировка и вывод данных
vandalv,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"></script>
    <style>
        table {
            border-collapse: collapse;
        }

        td {
            border: 1px solid gray;
            padding: 2px 5px;
            text-align: center;
        }
    </style>
</head>

<body>

    <div id="grid-holder"></div>

    <script type="text/template" id="grid-template">
        <table>
            <thead>
                <tr>
                    <th>№</th>
                    <th>дата</th>
                    <th>сумма</th>
                    <th>продукты</th>
                </tr>
            </thead>
            <tbody>
                <% for(var i = 0; i < list.length; i++) { %>
                    <tr><td>
                            <%=i + 1%>
                        </td>
                        <td>
                            <%=new Date(list[i].data).toLocaleDateString()%>
                        </td>
                        <td>
                            <%=list[i].total%>
                        </td>
                        <td>
                        <ul>
                        <% for(var k = 0; k < list[i].produkt.length; k++) { %>
                        <li>
                            <%=list[i].produkt[k].name%>
                         </li>
                        <% } %>
                            </ul>
                        </td>
                    </tr>
                    <% } %>
            </tbody>
        </table>
    </script>

    <script>
function randomValueBetween(min, max) {
        return Math.random() * (max - min) + min;
}
function randomDate(date1 = '01-01-2017', date2 = new Date().toLocaleDateString()) {
    date1 = new Date(date1).getTime();
    date2 = new Date(date2).getTime();
    return randomValueBetween(date2, date1)
}
function getElem(arr)
{
    return arr[randomValueBetween(0, arr.length)|0]
}
var vegString=["Apple","Apricots","Avocado","Banana","Blackberries"];
    var bases = Array.from({length : 10}, _ => {
    var total = 0,
    produkt = Array.from({length : 5}, _ => {
    var num = randomValueBetween(100, 999)|0,
            name = getElem(vegString),
            price = randomValueBetween(1, 100).toFixed(2),
            count = randomValueBetween(1, 100)|0;
            total += price * count;
            return {num, name, price, count}
    }),
    data = randomDate();
    total = total.toFixed(2);
    return {data, total, produkt}
    })




        var tmpl = document.getElementById('grid-template').innerHTML.trim();
        tmpl = _.template(tmpl);


        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: bases
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>5  фактур по найбольшей стоимости</h1>');
        var sortTotal = bases.slice(0).sort((a,b)=> a.total - b.total).slice(-5);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: sortTotal
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>фактуры по возрастанию стоимости, в которых есть Avocado</h1>');
        var filterAvocadoSortTotal = bases.filter(base => base.produkt.some(el  => el.name == 'Avocado')).sort((a,b)=> a.total - b.total);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: filterAvocadoSortTotal
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>фактуры за 2018 год, по возрастанию даты</h1>');
        var filterDataSort = bases.filter(base => (new Date(base.data)).getFullYear() == 2018).sort((a,b)=> a.data - b.data);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: filterDataSort
        }));
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' , '<h1>фактуры за первые полгода 2019 год, по возрастанию даты</h1>');
        var dataStart = new Date(2019, 0, 1, 0, 0, 0, 0), dataEnd = new Date(2019, 6, 0, 0, 0, 0, 0);
        var filter2019Sort = bases.filter(base => base.data >= dataStart && base.data <= dataEnd).sort((a,b)=> a.data - b.data);
        document.getElementById('grid-holder').insertAdjacentHTML('beforeEnd' ,tmpl({
            list: filter2019Sort
        }));
    </script>

</body>

</html>

Последний раз редактировалось рони, 09.12.2019 в 02:54.
Ответить с цитированием
  #20 (permalink)  
Старый 09.12.2019, 02:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vandalv,
randomDate возвращает сейчас ms.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами Gerd199 Общие вопросы Javascript 41 05.04.2018 23:36
Работа с массивами, help! tvv90 Общие вопросы Javascript 11 02.02.2016 10:34
Работа с массивами BorisBritva jQuery 6 23.02.2014 18:31
Работа с массивами. Требуется помощь. Кристи Общие вопросы Javascript 3 08.02.2011 18:00
работа с массивами one-two Работа 11 31.01.2011 16:30