我有一个包含文本数据的网页:
const memo = fn => {
const cache = {};
return (...args) => {
const key = JSON.stringify(args);
if(key in memo) return memo[key];
return memo[key] = fn(...args);
};
};
const memoizedF = memo(f);
我只希望显示[
{
"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
}
]
等于1的数据。我知道我应该使用Id
,但是我不知道如何在我的代码中实现它。 .filter()
应该过滤bna.compra,bna.venta等字段的值。
Id
例如,我需要获取:
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)}%`;
以下是Id:1的值
?️ 12/09/2019 - 10:30
?Informal:
Compra: $51,88 | Venta: $54,08
Variación:? 16,18%
答案 0 :(得分:5)
我知道我应该使用.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);
FWIW,我强烈建议从var
移至let
和const
。 :-)
答案 1 :(得分:0)
首先,您应该有一个要过滤的数组。
从我的示例代码中可以看到,cotizaciones并不是数组。
因此,首先将数组值分配给cotizaciones。
一旦cotizaciones是一个数组,就可以像下面那样实现过滤器: cotizaciones.filter(arrValue => arrValue.id === 1);
arrValue只是一个名称,可以是任何名称。但是我认为这很清楚;)
您还可以使用cotizaciones.find(arrValue => arrValue.id === 1);
如果您只需要从数组中找到一个对象,那是更好的选择。
答案 2 :(得分:0)
首先,如果您要比较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是行的遍历。
答案 3 :(得分:0)
是的,如果您期望一个包含多个具有相同“ Id”的对象/条目的数据集,则filter()
方法将很有用。另外,它很容易实现。在这里。
function filterData(data, id) {
return data.filter(item => item["Id"] === id);
}
var data = [{"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}];
console.log(filterData(data, 1));