首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过数据的.filter获取特定值

通过数据的.filter获取特定值
EN

Stack Overflow用户
提问于 2019-08-13 21:42:16
回答 4查看 142关注 0票数 3

我有一个包含文本数据的网页:

代码语言:javascript
复制
[
   {
      "Id":1,
      "Nombre":"DÓLAR B.NACIÓN",
      "VariacionPorcentual":3.63636,
      "Compra":52,
      "Venta":57,
      "UltimaActualizacion":"2019-08-13T10:32:02.810Z",
      "Orden":1
   },
   {
      "Id":2,
      "Nombre":"DÓLAR BLUE",
      "VariacionPorcentual":19.40298,
      "Compra":53,
      "Venta":56,
      "UltimaActualizacion":"2019-08-13T10:32:02.810Z",
      "Orden":2
   }
]

我只需要显示Id等于1的数据。我知道我应该使用.filter(),但我不知道如何在我的代码中实现它。此Id应过滤bna.compra、bna.venta等字段的值。

代码语言:javascript
复制
function getBNA(callback){
  request("URL", function(err, response, body){
         if (err)
        {
          console.log("Error getting information from Lanacion", err);
          return
        }
        var bna = JSON.parse(body);
        callback(bna);
  });
}

app.all(`/${process.env.BOT_ENDPOINT}`, function(req, res){

  var cotizaciones = cotizaciones.filter(id => id===1);
  getVariacion((dolar) => getBNA((bna) => {
    var status = `️ ${dolar.fecha}
Informal:
Compra: $${dolar.compra} | Venta: $${dolar.venta}
Variación: ${dolar["class-variacion"]!=='up' ? "" : ""} ${dolar.variacion}

BNA: 
Compra: $${bna.compra} | Venta: $${bna.venta}
Variación: ${(bna.VariacionPorcentual)==0 ? "➖" : (bna.VariacionPorcentual)<0 ? "" : ""} ${(bna.VariacionPorcentual)}%`;  

例如,我需要获取:

代码语言:javascript
复制
️ 12/09/2019 - 10:30
Informal:
Compra: $51,88 | Venta: $54,08
Variación: 16,18%

以下是Id:1的值

代码语言:javascript
复制
 BNA: 
Compra: $52(compra)  | Venta: $57 (venta)
Variación:  3.63636 (variacion porcentual)
EN

回答 4

Stack Overflow用户

发布于 2019-08-13 21:45:36

我知道我应该使用.filter()...

如果你只想找到一件东西,那就不是。为此,您可以使用find

代码语言:javascript
复制
var cotizacion = cotizaciones.find(({Id}) => Id === 1);

现场示例:

代码语言:javascript
复制
const cotizaciones = [{"Id":1,"Nombre":"DÓLAR B. NACIÓN","VariacionPorcentual":3.63636,"Compra":52,"Venta":57,"UltimaActualizacion":"2019-08-13T10:32:02.810Z","Orden":1},{"Id":2,"Nombre":"DÓLAR BLUE","VariacionPorcentual":19.40298,"Compra":53,"Venta":56,"UltimaActualizacion":"2019-08-13T10:32:02.810Z","Orden":2}];
var cotizacion = cotizaciones.find(entry => entry.Id === 1);
console.log(cotizacion.VariacionPorcentual, cotizacion.Compra, cotizacion.Venta, cotizacion.UltimaActualizacion);

请注意,我在参数列表中使用了解构,以便从对象中选取id属性。不解构的情况下:

代码语言:javascript
复制
var cotizacion = cotizaciones.find(entry => entry.Id === 1);

现场示例:

代码语言:javascript
复制
const cotizaciones = [{"Id":1,"Nombre":"DÓLAR B. NACIÓN","VariacionPorcentual":3.63636,"Compra":52,"Venta":57,"UltimaActualizacion":"2019-08-13T10:32:02.810Z","Orden":1},{"Id":2,"Nombre":"DÓLAR BLUE","VariacionPorcentual":19.40298,"Compra":53,"Venta":56,"UltimaActualizacion":"2019-08-13T10:32:02.810Z","Orden":2}];
var cotizacion = cotizaciones.find(entry => entry.Id === 1);
console.log(cotizacion.VariacionPorcentual, cotizacion.Compra, cotizacion.Venta, cotizacion.UltimaActualizacion);

顺便说一句,我强烈建议从var迁移到letconst。:-)

票数 4
EN

Stack Overflow用户

发布于 2019-08-13 21:47:21

首先,你应该有一个要过滤的数组。

从我在你的示例代码中可以看到的情况来看,cotizaciones不是一个数组。

因此,首先将数组值分配给cotizaciones。

一旦cotizaciones是一个数组,你就可以像这样实现过滤器: cotizaciones.filter(arrValue => arrValue.id === 1);

arrValue只是一个名字,可以是任何东西。但我认为这一点很清楚;)

也可以使用cotizaciones.find(arrValue => arrValue.id === 1);

如果您只需要从数组中查找一个对象,这是更好的选择。

票数 0
EN

Stack Overflow用户

发布于 2019-08-13 22:01:03

首先,如果您有一个要与ID进行比较的键列表,则需要一个集合:

代码语言:javascript
复制
const mySet = new Set(['a','b','c'])

然后你需要过滤你的数据。

代码语言:javascript
复制
const rows = [.....];
const result = rows.filter( row => mySet.has(row.Id))

其中ID是正在查看的密钥。

它将使运行时为O(n+m),其中n是集合的转换/生成,m是行的遍历。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57479065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档