JavaScript 中缩减数组的返回索引

如何解决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"
    }
  ]
}

基本上,我想获取市场数组,映射选择和

  1. 返回价格与 0.5 之间存在差异的数组。
  2. 然后我想获取该数组并返回最接近零的值。

我可以从这个函数中得到结果:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?