как напечатать имена всех студентов, у которых процент более 70% в javascript? - PullRequest
2 голосов
/ 12 июля 2020

Я использую json-rule-engine. https://www.npmjs.com/package/json-rules-engine У меня есть список студентов, в котором есть имена и их процентное соотношение. Также у меня есть business rule, процентное соотношение должно быть больше или равно 70. поэтому я хочу напечатать имена всех студентов, у которых процентное соотношение больше 70

вот мой код https://repl.it/repls/AlienatedLostEntropy#index. js

студент список

const students = [
  {
    name:"naveen",
    percentage:70
  },
  {
    name:"rajat",
    percentage:50
  },
  {
    name:"ravi",
    percentage:75
  },
  {
    name:"kaushal",
    percentage:64
  },
  {
    name:"piush",
    percentage:89
  }
] 

правило

engine.addRule({
  conditions: {
    all: [
      {
        fact: "percentage",
        operator: "greaterThanInclusive",
        value: 70
      }
    ]
  },
  onSuccess(){
    console.log('on success called')
  },
  onFailure(){
    console.log('on failure called')
  },
  event: {
    type: "message",
    params: {
      data: "hello-world!"
    }
  }
});

код https://repl.it/repls/AlienatedLostEntropy#index. js любое обновление

Ответы [ 3 ]

1 голос
/ 12 июля 2020

Модуль json -rules-engine принимает данные в другом формате. В вашем Repl.it вы не определили никаких фактов.

Факты должны быть:

let facts = [
  {
    name:"naveen",
    percentage:70
  },
  [...]

Кроме того, кажется, что сам модуль не обрабатывает массив фактов. Вы должны адаптировать его, чтобы добиться этого. Это можно сделать с помощью:

facts.forEach((fact) => {
  engine
    .run(fact)
    [...]

Наконец, данные студента находятся внутри almanac. Вы можете получить эти значения с помощью: results.almanac.factMap.get('[name|percentage|age|school|etc]').value

Вот обновленный Repl.it: https://repl.it/@adelriosantiago / json -rules-example

0 голосов
/ 12 июля 2020

Вот рабочий пример.

Подсчет success и failed случаев

const { Engine } = require("json-rules-engine");


let engine = new Engine();

const students = [
  {
    name:"naveen",
    percentage:70
  },
  {
    name:"rajat",
    percentage:50
  },
  {
    name:"ravi",
    percentage:75
  },
  {
    name:"kaushal",
    percentage:64
  },
  {
    name:"piush",
    percentage:89
  }
] 

engine.addRule({
    conditions: {
            all: [{
            fact: 'percentage',
            operator: 'greaterThanInclusive',
            value: 70
        }]
    },
    event: { type: 'procedure_result'}
})

let result = {success_count : 0 , failed_count : 0}

engine.on('success', () => result.success_count++)
    .on('failure', () => result.failed_count++)

const getResults = function(){
    return new Promise((resolve, reject) => {
        students.forEach(fact => {
            return engine.run(fact)
            .then(() => resolve())
        })
    })
}

getResults().then(() => console.log(result));

0 голосов
/ 12 июля 2020

Я мог бы послать совершенно несвязанный ответ, но начнем. Поскольку объект students является массивом, вы можете просто пройти через него l oop, а затем использовать оператор if else.

for (let i = 0; i < students.length; i++) {
    if (students[i].percentage >= 70) {
        console.log(students[i].name);
    }
}

Извините, если это неверно!

...