【问题标题】:Compare a string value to an array and if it matches get the index of the array item将字符串值与数组进行比较,如果匹配,则获取数组项的索引
【发布时间】:2021-07-26 23:00:42
【问题描述】:

我正在尝试编写一个通知系统,但我遇到了一个问题,所以我有一个名为 getAlerts 的函数,它返回如下数组:

[{"id":3,"user_id":"1","asset":"xyz","price":600,"position":"above"},{"id":4,"user_id":"1","asset":"xyz","price":300,"position":"above"}]

然后我有一个带有 setInterval 的 websocket,它每 1 秒检查一次值如何比较来自 websocket 的价格字符串与数组中关于其 user_id 键的所有价格键?假设当前价格与数组中的价格键之一匹配如何获取匹配键的索引?我已经做了很多谷歌搜索,但不幸的是,这些问题比较了两个数组,但在获取匹配键的索引时仍然找不到任何东西。

NodeJS 代码

const main = (ticker) => {
    let list = [];
    
  
        if (assetprice > list) {
             // get user_id of matched key
            // do something
        }
    
   
};

【问题讨论】:

  • 一个简单的过滤器,例如:alerts.filter(v => v.price == 41000) 为您提供所有匹配的警报。

标签: javascript node.js arrays


【解决方案1】:

您可以使用Array.prototype.findIndex 使用谓词查找第一个匹配元素的索引。或者,使用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 作为数据/谓词,但这也可以与您检查的对象列表一起使用,例如v.user_id === user_id.

【讨论】:

  • 市场价格每毫秒变化一次Array.prototype.find 不起作用,这就是为什么我想检查价格是高于还是低于当前市场价格
  • 为什么不起作用?如果是因为=== 太严格,谓词可以是任何东西,它只是一个函数。您可以随意使用.find(isMatch).find(v => v.field <= 123) 等。
猜你喜欢
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多