【问题标题】:Array.some is not a functionArray.some 不是函数
【发布时间】:2017-04-15 06:04:17
【问题描述】:

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

我不明白为什么会收到错误消息:“Uncaught TypeError: arr2.some is not a function”

功能代码:

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,或者如果它存在于本地存储中,则从那里获取它。

将 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" or M1,M15" or M5,M15" or "M1,M5,M15" 等等。

返回/过滤的新数组将在每个循环中传递给 jquery,然后将遍历数据并将数据附加到 div。 (我已经有这部分工作了)

感谢任何指导!

【问题讨论】:

  • 5,15 - 你的意思是[5,15] 吗? - 否则,5,15 不是数组...它只是一个字符串。
  • 确定 JSON 被解析了吗?迹象表明它不是。
  • tymeJV 是对的,如果您从 localStorage 获取值,则必须拆分字符串。 .split(',')
  • 我以为是。但我会仔细检查。仔细检查永远不会有坏处。
  • nvm,tymeJV 是对的。 arr2 / 本地存储是问题。

标签: javascript jquery arrays json


【解决方案1】:

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

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

然后把它作为一个数组拉出来

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2017-03-18
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多