如何解决JavaScript 中缩减数组的返回索引
我有这个有效负载,我试图在 JavaScript 中执行一些函数:
{
"markets": [
{
"mtId": 27,"id": 1,"cId": "27-1","mt": "OVER_UNDER","selections": [
{
"id": 1,"price": 1.0896773820446435,"selectionStatus": 1,"name": "Over 0.5"
},{
"id": 2,"price": 12.159031085167172,"name": "Under 0.5"
}
],"marketName": "Over Under 0.5"
},{
"mtId": 27,"id": 2,"cId": "27-2","price": 1.4531444546407393,"name": "Over 1.5"
},"price": 3.207355058969988,"name": "Under 1.5"
}
],"marketName": "Over Under 1.5"
},"id": 3,"cId": "27-3","price": 2.3859593325595307,"name": "Over 2.5"
},"price": 1.721681322609395,"name": "Under 2.5"
}
],"marketName": "Over Under 2.5"
}
]
}
基本上,我想获取市场数组,映射选择和
- 返回价格与 0.5 之间存在差异的数组。
- 然后我想获取该数组并返回最接近零的值。
我可以从这个函数中得到结果:
export const generateNumberClosestToZero = (markets) => {
let goal = 0;
let result = markets
.map((market) =>
market.selections.reduce(function (bookPercentage,selection) {
return 0.5 - 1 / selection.price;
},0)
)
.reduce(function (prev,current) {
return Math.abs(current - goal) < Math.abs(prev - goal) ? current : prev;
});
return result;
};
但我还想做的是检索该减少值的索引,以便我可以在该特定市场上执行操作(例如 markets[1]
等)。有没有办法用我的代码来做到这一点,或者比我目前拥有的更好的解决方案?
解决方法
您可以将索引与值一起映射,并仅按值减少。
const
generateNumberClosestToZero = (markets) => {
let goal = 0;
return markets
.map((market,index) => [
market.selections.reduce((bookPercentage,selection) => 0.5 - 1 / selection.price,0),index
])
.reduce((a,b) => Math.abs(b[0] - goal) < Math.abs(a[0] - goal) ? b : a);
},data = { markets: [{ mtId: 27,id: 1,cId: "27-1",mt: "OVER_UNDER",selections: [{ id: 1,price: 1.0896773820446435,selectionStatus: 1,name: "Over 0.5" },{ id: 2,price: 12.159031085167172,name: "Under 0.5" }],marketName: "Over Under 0.5" },{ mtId: 27,id: 2,cId: "27-2",price: 1.4531444546407393,name: "Over 1.5" },price: 3.207355058969988,name: "Under 1.5" }],marketName: "Over Under 1.5" },id: 3,cId: "27-3",price: 2.3859593325595307,name: "Over 2.5" },price: 1.721681322609395,name: "Under 2.5" }],marketName: "Over Under 2.5" }] };
console.log(generateNumberClosestToZero(data.markets));
我认为这就是您要找的。p>
const markets = [{"mtId": 27,"id": 1,"cId": "27-1","mt": "OVER_UNDER","selections": [{"id": 1,"price": 1.0896773820446435,"selectionStatus": 1,"name": "Over 0.5"},{"id": 2,"price": 12.159031085167172,"name": "Under 0.5"}],"marketName": "Over Under 0.5"},{"mtId": 27,"id": 2,"cId": "27-2","price": 1.4531444546407393,"name": "Over 1.5"},"price": 3.207355058969988,"name": "Under 1.5"}],"marketName": "Over Under 1.5"},"id": 3,"cId": "27-3","price": 2.3859593325595307,"name": "Over 2.5"},"price": 1.721681322609395,"name": "Under 2.5"}],"marketName": "Over Under 2.5"}];
const generateNumberClosestToZero = (markets) => {
let closest = 9999; // closest value found so far
let index = []; // output
markets.forEach((m,n) => {
m.selections.forEach((s,t) => {
if (s.price < closest) { // if closer value found
closest = s.price; // set closest value to new value
index[0] = n; // store market index
index[1] = t; // store selections index
}
})
});
return index;
};
const closest = generateNumberClosestToZero(markets);
console.log(closest); // get indexes
console.log(markets[closest[0]].selections[closest[1]]); // access results from market
输出:
[
0,0
]
{
"id": 1,"name": "Over 0.5"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。