我有一个包含文本数据的网页:
[
{
"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等字段的值。
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)}%`; 例如,我需要获取:
️ 12/09/2019 - 10:30
Informal:
Compra: $51,88 | Venta: $54,08
Variación: 16,18%以下是Id:1的值
BNA:
Compra: $52(compra) | Venta: $57 (venta)
Variación: 3.63636 (variacion porcentual)发布于 2019-08-13 21:45:36
我知道我应该使用.filter()...
如果你只想找到一件东西,那就不是。为此,您可以使用find
var cotizacion = cotizaciones.find(({Id}) => Id === 1);现场示例:
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属性。不解构的情况下:
var cotizacion = cotizaciones.find(entry => entry.Id === 1);现场示例:
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迁移到let和const。:-)
发布于 2019-08-13 21:47:21
首先,你应该有一个要过滤的数组。
从我在你的示例代码中可以看到的情况来看,cotizaciones不是一个数组。
因此,首先将数组值分配给cotizaciones。
一旦cotizaciones是一个数组,你就可以像这样实现过滤器: cotizaciones.filter(arrValue => arrValue.id === 1);
arrValue只是一个名字,可以是任何东西。但我认为这一点很清楚;)
也可以使用cotizaciones.find(arrValue => arrValue.id === 1);
如果您只需要从数组中查找一个对象,这是更好的选择。
发布于 2019-08-13 22:01:03
首先,如果您有一个要与ID进行比较的键列表,则需要一个集合:
const mySet = new Set(['a','b','c'])然后你需要过滤你的数据。
const rows = [.....];
const result = rows.filter( row => mySet.has(row.Id))其中ID是正在查看的密钥。
它将使运行时为O(n+m),其中n是集合的转换/生成,m是行的遍历。
https://stackoverflow.com/questions/57479065
复制相似问题