如何检查localStorage值是否在数组中?

时间:2018-03-30 06:30:19

标签: javascript jquery

基于this answer我应该使用$.inArray,因此我会这样做:

var curPostId = $(".my_post_id").attr("data-id");

if($.inArray(curPostId, lines)) {
  $('#'+localStorage.getItem('saveButton')).attr('disabled', true);
}

如果我这样做:console.log(curPostId);我得到248这是正确的。然后,如果我console.log(lines);,我会[242, 248]

行的定义如下:

var lines = localStorage.getItem("lines") ? JSON.parse(localStorage.getItem("lines")) : [];

但是检查它是否在数组中没有发生,因为它没有被应用$('#'+localStorage.getItem('saveButton')).attr('disabled', true);

这就是我在本地存储上设置daveButton的方法

$(".save_post").on("click", function() {
  if (counter >= 2) { 
    alert('nope'); 
    return; 
  } else {
    $(this).attr("disabled", "true");
    localStorage.setItem('saveButton', $(this).attr('id'));
    var thisId = $(".my_post_id").attr("data-id");
    lines.push(thisId);
    localStorage.setItem("lines", JSON.stringify(lines));
  }
});

这个问题是对我之前的问题how to keep button state across different pages的跟进,其答案有效,但只是部分解决。

2 个答案:

答案 0 :(得分:2)

只需使用Array.includes方法 - 它不那么令人困惑,更适合您正在寻找的内容,并且不需要jQuery。

if (lines.includes(curPostId)) {
  // ...

另请注意,您可以通过直接分配和获取localStorage点属性来简化语法,例如:

var lines = JSON.parse(localStorage.lines || '[]');
// ... 
localStorage.saveButton = $(this).attr('id');
// ... 
localStorage.lines = JSON.stringify(lines);

答案 1 :(得分:1)

$ .inArray返回元素的索引,所以会发生什么,你的元素是'0'索引,如果value是0则条件为false

所以你可以使用

 if($.inArray(curPostId, lines) !== -1) {

或使用ES6的includes方法

if (lines.includes(curPostId)) {