在javascript中比较和过滤对象数组

问题描述 投票:3回答:2

如何确定最便宜和最快的速率并获得单个对象的值。

  • cheapest是通过使用具有netfeeleast value来确定的
  • fastest是通过使用具有speedless days来确定的
  • best是通过使用具有amounthighest 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
javascript jquery arrays object
2个回答
3
投票

很简单..

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') return = 0.7


1
投票

您可以应用此hack,以获得预期输出中的答案:

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);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.