Сравнить и отфильтровать массив объектов в JavaScript - PullRequest
3 голосов
/ 11 апреля 2019

Как определить самый дешевый и быстрый тариф и получить значение в одном объекте.

  • cheapest определяется с помощью netfee, имеющего least value
  • fastest определяется с помощью speed с less days
  • best определяется с использованием amount с highest value

Я застрял и дал знать, есть ли альтернативарешение.

var result = getValue(obj);
getValue(obj){
 var cheapest= Math.min.apply(Math, obj.map(function (el) {
        return el.netfee;
  })); 
  var best= Math.max.apply(Math, obj.map(function (el) {
        return el.amount;
  }));
  var res= Object.assign({}, cheapest, best);
return res;
}
var obj=[
{ 
  id: "sample1",
  netfee: 10,
  speed: "1days",
  amount: "100"
},
{
 id: "sample2",
 netfee: 6,
 speed: "2days",
 amount: "200"
},
{
 id: "sample3",
 netfee: 4,
 speed: "3days",
 amount: "50"
}
]

Expected Output:

Cheapest : Sample 3

Fastest: Sample 1

Best: Sample 2

Ответы [ 2 ]

3 голосов
/ 11 апреля 2019

так просто ..

var obj=[
  { id: "sample1", netfee: 10, speed: "1days", amount: "100" },
  { id: "sample2", netfee: 6,  speed: "2days", amount: "200" },
  { id: "sample3", netfee: 4,  speed: "3days", amount:  "50" }
];

var
  cheapest = obj.reduce((acc, cur)=>(acc.netfee < cur.netfee ? acc : cur)).id,
  fastest  = obj.reduce((acc, cur)=>(parseInt(acc.speed,10) < parseInt(cur.speed,10) ? acc : cur)).id,
  best     = obj.reduce((acc, cur)=>(Number(acc.amount) > Number(cur.amount) ? acc : cur)).id;

console.log( "cheapest =", cheapest  )
console.log( "fastest  =", fastest  )
console.log( "best     =", best  )

[править]: Спасибо muka.gergely за его замечание по parseInt(acc.speed,10) (укажите для использования базы 10)
для заметки: console.log(parseFloat('0.7 days') возврат = 0,7

1 голос
/ 11 апреля 2019

Вы можете применить этот хак, чтобы получить ответ как в ожидаемом выводе:

var obj = [
  {
    id: "sample1",
    netfee: 10,
    speed: "1days",
    amount: "100"
  },
  {
    id: "sample2",
    netfee: 6,
    speed: "2days",
    amount: "200"
  },
  {
    id: "sample3",
    netfee: 4,
    speed: "3days",
    amount: "50"
  }
];

var result = getValue(obj);

function getValue(obj) {
  var cheapest = obj.reduce((acc, next) => acc.netfee < next.netfee ? acc : next).id;
  var fastest = obj.reduce((acc, next) => parseInt(acc.speed) < parseInt(next.speed) ? acc : next).id;
  var best = obj.reduce((acc, next) => +acc.amount > +next.amount ? acc : next).id;

  var res = Object.assign({}, {
    cheapest,
    fastest,
    best
  });

  return res;
}

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