【问题标题】:Get Minimum Value From Array of Objects from JSON file从 JSON 文件中的对象数组中获取最小值
【发布时间】:2021-07-23 05:18:42
【问题描述】:

这是我的 data.json 文件...如果到达是阿姆斯特丹,出发地是伦敦,我想要最低费用

谁能告诉我如何映射它

{
"currency":"EUR",
 "deals": [{"departure":"London",
           "arrival":"Amsterdam",
           "cost":160,"transport":"train"},
          {"departure":"London",
           "arrival":"Amsterdam",
           "cost":40,"transport":"car"},
          {"departure":"London",
           "arrival":"Amsterdam",
           "cost":120,"transport":"bus"}]
}

我试过了:

const x = data.deals.map((v)=>{
  if(v.departure==="London" && v.arrival==="Amsterdam"){ 
    return v.cost
  }
}

【问题讨论】:

标签: javascript arrays json reactjs


【解决方案1】:

const data = {
  "currency": "EUR",
  "deals": [{
      "departure": "London",
      "arrival": "Amsterdam",
      "cost": 160,
      "transport": "train"
    },
    {
      "departure": "London",
      "arrival": "Amsterdam",
      "cost": 40,
      "transport": "car"
    },
    {
      "departure": "London",
      "arrival": "Amsterdam",
      "cost": 120,
      "transport": "bus"
    }
  ]
};

const min = data.deals
  .filter(d => d.departure == "London" && d.arrival == "Amsterdam")
  .reduce((agg, d) => Math.min(agg, d.cost), Infinity);

console.log(min);

【讨论】:

  • filter、reduce等是map的属性吗?
  • 它们是数组的方法
  • 现在我也可以像这样访问该成本的“运输”- const transp= data.deals .filter(d => d.departure == "London" && d.arrival == "阿姆斯特丹" && d.cost=="min") .reduce((d)=>d.transport); ??
【解决方案2】:

deals 键的值是一个数组,所以你可以对其进行排序。

const arr = [{"departure":"London", "arrival":"Amsterdam", "cost":160,"transport":"train"},
{"departure":"London", "arrival":"Amsterdam", "cost":40,"transport":"car"},
{"departure":"London", "arrival":"Amsterdam", "cost":120,"transport":"bus"}]

const filteredArr = arr.filter(a => a.departure === "London" && a.arrival === "Amsterdam")
function orderByCost(a, b) {
    return a["cost"] - b["cost"]
}

filteredArr.sort(orderByCost)

console.log(filteredArr)

现在如果你想要最小成本运输的对象,你可以得到数组的第一个元素

【讨论】:

  • 确实如此,但这不会按到达和离开进行过滤
  • 正确,我以为都是关于“阿姆斯特丹”和“伦敦”的数据,刚刚调整了:)
【解决方案3】:

您可以使用Array#reduce

const o={currency:"EUR",deals:[{departure:"London",arrival:"Amsterdam",cost:160,transport:"train"},{departure:"London",arrival:"Amsterdam",cost:40,transport:"car"},{departure:"London",arrival:"Amsterdam",cost:120,transport:"bus"}]};
const res = o.deals.reduce((acc, curr) => 
   curr.departure === "London" && curr.arrival === "Amsterdam" ? 
      Math.min(acc, curr.cost) 
      : acc, Infinity);
console.log(res);

【讨论】:

  • 错字:cost 应该是acc
  • @TJ 很好。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2020-09-28
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多