[英]Comparing values of objects in array and making operation on them
我正在尝试比较对象中的相同字段元素并重组它们。 我尝试使用filter
, sort
方法但无法实现。 我有一个这样的数组:
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.41
、 2.83
、 4.24
、 5.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.