繁体   English   中英

比较数组中对象的值并对其进行操作

[英]Comparing values of objects in array and making operation on them

我正在尝试比较对象中的相同字段元素并重组它们。 我尝试使用filtersort方法但无法实现。 我有一个这样的数组:

const data = [
  {
    id: 1,
    direction: "A",
    carry: 6,
    distance: 1.41,
  },
  {
    id: 2,
    direction: "B",
    carry: 5,
    distance: 2.83,
  },
  {
    id: 3,
    direction: "C",
    carry: 4,
    distance: 4.24,
  },
  {
    id: 4,
    direction: "D",
    carry: 3,
    distance: 5.66,
  },
];

例如:我们以distance场为例,它们是1.412.834.245.66 最大值 ( 5.66 ) 将是 100%,其他值可以像proportion一样计算。

5.66 -> 100%

1.41 -> 25%

2.83 -> 50%

4.24 -> 75%

carry字段也遵循这种方式。 最后的结果应该是这样的:

const data = [
  {
    id: 1,
    direction: "A",
    carry: 6,
    carry_rating: 100,
    distance: 1.41,
    distance_rating: 25,
  },
  {
    id: 2,
    direction: "B",
    carry: 5,
    carry_rating: 84,
    distance: 2.83,
    distance_rating: 50,
  },
  {
    id: 3,
    direction: "C",
    carry: 4,
    carry_rating: 67,
    distance: 4.24,
    distance_rating: 75,
  },
  {
    id: 4,
    direction: "D",
    carry: 3,
    carry_rating: 50
    distance: 5.66,
    distance_rating: 100,
  },
];

我挣扎了好几天。 非常感谢任何支持。

一个简单的方法是首先找到距离和进位的最大值。 可以使用数组reduce在 1 次迭代中执行此操作。 之后使用数组map添加新字段。

 const data = [ { id: 1, direction: "A", carry: 6, distance: 1.41, }, { id: 2, direction: "B",carry: 5, distance: 2.83,}, { id: 3, direction: "C", carry: 4, distance: 4.24, }, { id: 4, direction: "D", carry: 3, distance: 5.66, },]; const {maxCarry,maxDistance} = data.reduce((acc,{carry,distance}) => { acc.maxCarry = carry < acc.maxCarry? acc.maxCarry: carry acc.maxDistance = distance < acc.maxDistance? acc.maxDistance: distance return acc }, {maxCarry:0,maxDistance:0}) const res = data.map((e) => { const carry_rating = Math.ceil((e.carry/maxCarry)*100) const distance_rating = Math.ceil((e.distance/maxDistance)*100) return {carry_rating,distance_rating,...e} }) console.log(res)

    const data = [
  {
    id: 1,
    direction: "A",
    carry: 6,
    distance: 1.41,
  },
  {
    id: 2,
    direction: "B",
    carry: 5,
    distance: 2.83,
  },
  {
    id: 3,
    direction: "C",
    carry: 4,
    distance: 4.24,
  },
  {
    id: 4,
    direction: "D",
    carry: 3,
    distance: 5.66,
  },
];

const maxDistance = Math.max(...data.map(obj => obj.distance))
console.log(maxDistance)

const results = data.map(obj => ({ ...obj, distance_rating:  Math.round((obj.distance / maxDistance) * 100)  }))
console.log(results)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM