我试图将2个数组传递给一个函数,该函数通过数组1逐数组2进行过滤,然后返回过滤后的结果。
我不明白为什么会收到错误:“未捕获的TypeError:arr2.some不是函数”
功能码:
function filterTF(arr1,arr2)
{
return arr1.filter(function(el)
{
return arr2.some(function(e)
{
return el.timeframe == e;
});
});
}
阵列1:
[
{"time":"2016-11-30 02:45:00","signal":"Buy","symbol":"AUDNZDecn","price":"1.04605","timeframe":"M15","epoch":"1480473900","candel":"M151480481100"},{"time":"2016-11-30 02:41:00","signal":"Sell","symbol":"AUDJPYecn","price":"84.08700","timeframe":"M1","epoch":"1480473660","candel":"M11480480860"},{"time":"2016-11-30 02:24:59","signal":"Buy","symbol":"EURNZDecn","price":"1.48820","timeframe":"M5","epoch":"1480472699","candel":"M51480479900"}
]
阵列2:
5,15
运行该功能的代码:
var timeframearr = localStorage.getItem("timeframe");
if(timeframearr.length === 0)
{
console.log("Wings - Timeframe Set: False");
var timeframearr = [];
}
else
{
var j = filterTF(j,timeframearr);
}
注意: j等于来自AJAX查询的JSON解析服务器响应,该查询与php脚本通信,该脚本将回传JSON响应(也就是上面的数组)。如果timeframearr的长度等于0,则重新创建它,或者如果它在本地存储中存在,则从那里获取它。
将timeframearr放入本地存储的代码:
if ($('#timeframe-checkbox1').is(":checked"))
{
var t1 = $('#timeframe-checkbox1').val();
console.log($('#timeframe-checkbox1').val());
timeframearr.push(t1);
}
if ($('#timeframe-checkbox2').is(":checked"))
{
var t2 = $('#timeframe-checkbox2').val();
console.log($('#timeframe-checkbox2').val());
timeframearr.push(t2);
}
if ($('#timeframe-checkbox3').is(":checked"))
{
var t3 = $('#timeframe-checkbox3').val();
console.log($('#timeframe-checkbox3').val());
timeframearr.push(t3);
}
localStorage.setItem("timeframe", timeframearr);
目标:我要尝试实现/理解的操作是一次按数组的多个“时间框架”值进行过滤,以便当用户单击复选框以选择三个时间框架中的任意一个时,可以从复选框中提取值,并通过用户选择的复选框的任意组合来过滤数组。例如“M1”,“M5”,“M15”,“M1,M5”或“M1,M15”或“M5,M15”或“M1,M5,M15”等。
返回/过滤的新数组将在每个循环中传递给jquery,然后将遍历数据并将数据附加到div。 (我已经在这部分工作了)
感谢任何指导!
最佳答案
我认为问题是您的localStorage
-这会将您的数组转换为字符串(逗号分隔)。您应该先设置stringify
并解析导出,然后执行localStorage
:
localStorage.setItem("timeframe", JSON.stringify(timeframearr));
并将其作为数组拉出
var arr = JSON.parse(localStorage.getItem("timeframe"));