2016-12-06 3 views
0

Привет, ребята, я не могу найти фактическую информацию о преобразовании строки в массив и после проверки их. Я пытаюсь проверить это сообщение в usermeta или нет. Перед преобразованием в массив этой строки. Но это почему-то не работает?Проверить значение в угловом массиве

$scope.like = function(id) { 
    PostService.GetUserMeta(user).then(function(data) { 
     var likes = '290 270' 
     var check_likes = likes.split(" "); 
     if (check_likes != id) { 
      $http.jsonp('http://somesite.com/api/userplus/update_user_meta_vars/', { 
       params: { 
        like_post: id + ',' + likes, 
        callback: "JSON_CALLBACK" 
       } 
      }).success(function(data) { 
       console.log('Id added to array'); 
      }); 
     } else { 
      console.log('ID already in array'); 
     } 
    }) 
} 
+1

check_likes - это массив, и вы сравниваете check_likes! = Id, пожалуйста, проверьте это снова. Вместо этого используйте check_likes.indexOf (id)> = 0. –

+1

вы можете использовать regex, – webduvet

ответ

3

Проблема заключается в заявлении

if(check_likes != id) 

Здесь check_likes является массив, таким образом, он никогда не будет равен id

Я думаю, что вам нужно, чтобы создать массив чисел.

var check_likes = likes.split(" ").map(Number); 

Затем вы можете использовать .indexOf(), чтобы проверить, существует ли id в массиве, она возвращает первый индекс, при котором данный элемент может быть найден в массиве, или -1, если его нет.

if (check_likes.indexOf(id) == -1){ 
    $http.jsonp(.....) 
}else{ 
    console.log('ID already in array'); 
} 
+0

спасибо! Это действительно элегантный способ) –

0

Вы не можете сравнить объект типа Array для примитивного типа данных, как ваш параметр id.

Попробуйте обертывание вашего кода внутри цикла следующим образом:

for(i = 0; i < check_likes.length; i++){ 
    if (check_likes[i] != id) { 
      $http.jsonp('http://somesite.com/api/userplus/update_user_meta_vars/', { 
      params: { 
       like_post: id + ',' + likes, 
       callback: "JSON_CALLBACK" 
      } 
     }).success(function(data) { 
      console.log('Id added to array'); 
     }); 
    } else { 
     console.log('ID already in array'); 
    } 
} 
0

Попробуйте этот код:

$scope.like = function(id) { 
    PostService.GetUserMeta(user).then(function(data) { 
     var likes = '290 270' 
     var check_likes = likes.split(" "); 
     if (check_likes.indexOf(id) == -1) { 
      $http.jsonp('http://somesite.com/api/userplus/update_user_meta_vars/', { 
       params: { 
        like_post: id + ',' + likes, 
        callback: "JSON_CALLBACK" 
       } 
      }).success(function(data) { 
       console.log('Id added to array'); 
      }); 
     } else { 
      console.log('ID already in array'); 
     } 
    }) 
} 

После разделения likes строки у вас есть массив из 2-х строк, и вы должны проверить, что ваш Параметр id не находится в этом массиве для выполнения вашего запроса. != не работает

Смежные вопросы