Возникла проблема при получении определенного имени ключа из API JSON - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть API с следующей подписью JSON:

[{
   "id": 3,
   "impact": 7,
   "probability": 0.7,
   "title": "Risk 3"
}]

Теперь у меня есть 3 похожих объекта в этом формате, которые на самом деле демонстрируют разные названия рисков или номера компаний.Теперь мне нужно выяснить, какой номер риска имеет наибольшее влияние или вероятность.Кроме того, какой риск имеет самый высокий RPZ,

 RPZ = impact * probability 

Мне удалось найти самые высокие значения любого из свойств в JSON.Но я перепробовал много способов выяснить название или название риска, связанного с ним.Это моя цель, которую я не могу сделать.Например, моя цель состоит в том, чтобы получить наибольшее значение, скажем, влияние из приведенного выше примера, который равен 7, а также распечатать его имя риска, которое является заголовком здесь.Я смог получить самые высокие значения, но не смог распечатать соответствующее имя риска или заголовок.

фрагмент liitle ....

var con = JSON.parse(body);

var highImpact = Math.max.apply(Math, con.map(i => i.impact));

теперь из вышеупомянутого highImpact, равного 7Теперь мне нужно вытащить соответствующее имя риска, которое будет ...... Риск 3. Вот где я борюсь.

Я проверил много похожих вопросов, заданных другими разработчиками в этом сообществе, а также несколько веб-страниц и блогов, найденных в Интернете.Но ничто не дало мне решения до сих пор.

Если кто-то из вас может помочь мне, я был бы очень благодаренмаксимальная RPZ, таблица рисков в реальном времени и график скользящей средней

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Максимальное значение можно найти, применив формулу в цикле reduce(), всегда возвращающем максимальное значение (по любому желаемому критерию).Это более эффективно, чем сортировка всего массива, поскольку вам нужен только один проход, и вы не создаете новый массив только для того, чтобы выбросить его. Он вернет объект из массива, отвечающий заданным вами критериям:

let arr = [
    { "id": 3, "impact": 7, "probability": 0.7, "title": "Risk 3" },
    { "id": 4, "impact": 4, "probability": 0.72, "title": "Risk 4" },
    { "id": 5, "impact": 1, "probability": 0.6, "title": "Risk 5" },    
    { "id": 6, "impact": 8, "probability": 0.91, "title": "Risk 6" }
]

// max impact * probability
let max = arr.reduce((max, current) => 
    current.impact * current.probability > max.impact * max.probability
    ? current
    : max
)
console.log(max)

Для одного значения это та же идея, но проще:

let arr = [
    { "id": 3, "impact": 7, "probability": 0.7, "title": "Risk 3" },
    { "id": 4, "impact": 4, "probability": 0.72, "title": "Risk 4" },
    { "id": 5, "impact": 9, "probability": 0.1, "title": "Risk 5" },    
    { "id": 6, "impact": 8, "probability": 0.91, "title": "Risk 6" }
]

// max impact
let max = arr.reduce((max, current) => 
    current.impact > max.impact 
    ? current
    : max
)
console.log(max)
0 голосов
/ 27 декабря 2018

Другой пример:

  function findHighest(arr){
    var highest = arr[0];

    for(let i = 0; i < arr.length; i++) {
        let current = arr[i]
        let rpz = current.impact * current.probability;
        if(rpz > (highest.impact * highest.probability)) {
            highest = current
        }
    }
    return highest.title
}
0 голосов
/ 27 декабря 2018

Вы можете сделать это, отсортировав по убыванию и выбрав первый элемент отсортированного массива.

let arr = [
  { "id": 3, "impact": 7, "probability": 0.7, "title": "Risk 3" },
  { "id": 4, "impact": 8, "probability": 0.8, "title": "Risk 4" }
]

let highestImpact = arr.sort((a,b)=>b.impact-a.impact)[0].title;

console.log(highestImpact)

Для наивысшего RPZ вы можете сделать это следующим образом

let arr = [
      { "id": 3, "impact": 7, "probability": 0.7, "title": "Risk 3" },
      { "id": 4, "impact": 8, "probability": 0.8, "title": "Risk 4" },
      { "id": 5, "impact": 10, "probability": 0.8, "title": "Risk 5" }
]

let highestRpz = arr.map(e=> {
 e.rpz= e.impact * e.probability
 return e;
 }).sort((a,b)=>b.rpz-a.rpz)[0].title

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