Array.some不是函数

时间:2016-11-30 19:18:00

标签: javascript jquery arrays json

我试图将2个数组传递给通过数组2过滤数组1的函数,然后返回过滤后的结果。

我不明白为什么我收到错误:“未捕获的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,则创建为new,或者如果它存在于本地存储中,则从那里获取它。

将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。 (我已经有了这部分工作)

感谢任何指导!

2 个答案:

答案 0 :(得分:4)

我认为问题是你的localStorage - 这会将你的数组转换为字符串(以逗号分隔)。在设置stringify并解析出路之前,您应该做localStorage

localStorage.setItem("timeframe", JSON.stringify(timeframearr));

将其作为数组拉出来

var arr = JSON.parse(localStorage.getItem("timeframe"));

答案 1 :(得分:2)

我们今天弹出了这个窗口,在我们的案例中,我们有一个将Input变量作为布尔值传递的地方,它应该是数组类型。因此,在.some行之前进行了简单的检查。

if (Array.isArray(myVar)) {
    // then do stuff
}