将字符串值与数组进行比较,如果匹配,则获取数组项的索引

bmp9r5qi  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(275)

我正试图编写一个加密警报系统,但我遇到了一个问题,所以我有一个名为 getAlerts 返回如下数组:

[{"id":3,"user_id":"1","ticker":"btcusdt","price":41000,"position":"above"},{"id":4,"user_id":"1","ticker":"btcusdt","price":36000,"position":"above"}]
[{"id":1,"user_id":"1","ticker":"btcusdt","price":40000,"position":"below"}]

然后我有一个带有setinterval的websocket,它每1秒检查一次值。如何将websocket中的价格字符串与数组中的所有价格键进行比较,并与它们的用户id键进行比较?假设当前价格与数组中的一个价格键匹配,如何获取匹配键的索引?我在谷歌上搜索了很多,但不幸的是,这些问题比较了两个数组,仍然找不到任何关于匹配键索引的信息。
nodejs代码

const WebSocket = require('ws');

const launchMonitorInstance = (ticker) => {
    let AboveList = [];
    let BelowList = [];

    getAlerts(ticker, "above").then((result) => {
        AboveList = JSON.stringify(result);
    });

    getAlerts(ticker, "below").then((result) => {
        BelowList = JSON.stringify(result);
    });

    const ws = new WebSocket(`wss://stream.binance.com:9443/ws/${ticker}@trade`);
    let coinprice;
    ws.on('message', function incoming(data) {
        let result = JSON.parse(data);
        coinprice = result.p;
    });

    setInterval(() => {
        if (coinprice > AboveList) {
             // get user_id of matched key
            // do something
        }
        if (coinprice < BelowList) {
            // get user_id of matched key
            // do something
        }
    }, 1000);

};
t98cgbkg

t98cgbkg1#

您可以使用array.prototype.findindex使用 predicate 查找第一个匹配元素的索引。或者,使用array.prototype.find立即获得结果:

const data = [ 'ABC123', 'DEF456', 'ABCDEF123456' ];

const index = data.findIndex(v => v.includes('DEF'));
console.log(index); // 1

const value = data.find(v => v.includes('DEF'));
console.log(value); // 'DEF456'

我只是简单地使用字符串和 String.prototype.includes 作为数据/ predicate ,但这也适用于您检查的对象列表,例如。 v.user_id === user_id .

相关问题