2016-11-30 5 views
1

Я пытаюсь передать 2 массива функции, которая фильтрует массив 1 массивом 2, а затем возвращает отфильтрованные результаты.Array.some не является функцией

Я не понять, почему я получаю сообщение об ошибке: "Uncaught 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"} 
] 

Array 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 равна JSON разобран сервер ответ от запроса AJAX, что переговоры с 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. (У меня уже есть эта часть)

Цените любое руководство!

+0

'' '5,15''' - вы имели в виду' '' [5,15] '' '? - Else, '' '5,15''' - это не массив ... Это просто строка. – tymeJV

+0

Вы уверены, что JSON разобрали? Знаки указывают, что это не так. –

+0

tymeJV прав, если вы получите значение из localStorage, вам придется разделить строку. .split (',') – inoabrian

ответ

4

Я думаю, что проблема в вашем localStorage - это преобразует ваш массив в строку (разделенная запятой). То, что вы должны сделать, это stringify перед установкой localStorage и разобрать на выходе:

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

И вытащить его как массив

var arr = JSON.parse(localStorage.getItem("timeframe")); 
Смежные вопросы