как использовать уникальное значение в объекте в целом - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть этот вызов API, где я хочу вернуть 3 самых высоких и 3 самых низких "totalScore" в моем объекте.

это моя функция

app.get('/getTopThree', (req, res) => {
     let store = Store.find({}, 'name _id', function (error, response) {
     }).sort({_id:-1})
    store.then(stores => {
       let output = {}


       function delay() {
         return new Promise(function (resolve, reject) {
           stores.map(async store => {
            var j = 0
             await Rate.find({
               "storeId": store._id
             },
             'rate date', function(error, response) {

               totalArray = [];
               response.filter(function(el) {
                 totalArray.push(el.rate);
               });
               sumOfVotes = totalArray.reduce((a, b) => a + b, 0);
               totalScore = Math.round(sumOfVotes / totalArray.length * 33.33);
               var counts = {};
               for (var i = 0; i < totalArray.length; i++) {
                 var num = totalArray[i];
                 counts[num] = counts[num] ? counts[num] + 1 : 1;
               }
               var finalStore = {
                 "totalScore": totalScore
               }
               output[j++] = finalStore;
             })
           })
           setTimeout(function () {

             resolve(store)
           }, 1000)
         })
       }

       delay().then(finalStore => {
         console.log(finalStore)
         console.log(output)
         res.send({
           "store": {
             "name": finalStore,
             "score": output
           }
         })
       })
     })


   })

и это мой вывод

{
    "store": {
        "Klaregade": {
            "name": "Klaregade",
            "totalScore": 93
        },
        "Overgade": {
            "name": "Overgade",
            "totalScore": 67
        }
    }
}

Итак, я хочу зациклить этот объект и вернуть 3 самых высоких как

store: {"самый высокий": output.highest, "самый низкий": output.lowest "}

Может кто-нибудь помочь мне с этим, проблема в том, что каждое возвращаемое значение в моем объекте имеет уникальное имя в начале ("klaregade" и "overgade")

как мне зациклить их и взять самое высокое и самое низкое значение?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я нашел решение для этого.

То, что я делал, было вместо объекта, который я выводил в массив. и затем вставил finalStore в массив.

и затем в .delay.then () я сделал цикл for на моем выходе

delay().then(finalStore => {
         console.log(output)
         for (var t = 0; t < output.length; t++) {
           output.push({
             "name": output[t].name,
             "score": output[t].totalScore
           })
         }
         res.send(output)
       })

как это

0 голосов
/ 14 сентября 2018

Вот пример рабочего решения:

const output = {
    "store": {
        "Klaregade": {
            "name": "Klaregade",
            "totalScore": 93
        },
        "Overgade": {
            "name": "Overgade",
            "totalScore": 1
        },
        "Overgade2": {
            "name": "Overgade2",
            "totalScore": 412
        },
        "Overgade3": {
            "name": "Overgade3",
            "totalScore": 32
        },
        "Overgade4": {
            "name": "Overgade4",
            "totalScore": 67
        }
    }
}

const sorted = Object.values(output.store).sort((a, b) => b.totalScore - a.totalScore);

const store = {
  highest: sorted.slice(0, 3),
  lowest: sorted.slice(-3),
};

Вы должны иметь в виду, что вы получите усеченные результаты, когда array.length < 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...