【问题标题】:json array check if there does not need to insert in localstorage?json数组检查是否不需要在localstorage中插入?
【发布时间】:2016-10-16 03:12:55
【问题描述】:

我需要检查一个 JavaScript 数组,看是否有重复值。最简单的方法是什么?如果不需要进入json数组,我只需要检查值是否已经存在。

function cek() {
    resi_or_code = document.getElementById('code_or_resi').value;
    resi = resi_or_code.split(',');
     if($.trim(resi_or_code) != ''){
      location.href = base_url + 'resi/' + encodeURIComponent(resi_or_code);
 
      }
      if (localStorage.daftar_data){
            daftar_data = JSON.parse(localStorage.getItem('daftar_data'));
            $("#riwayat").toggle();

      }
      else {
      daftar_data = [];
      }

    for (y in daftar_data){
        var q =  daftar_data[y].resis;
        for (x in resi){
        console.log(q); 
            if (q === resi[x]) 
            {   
            console.log('Value exist');

            }else{
            console.log('Value does not exist');
            daftar_data.push({'resis':resi[x]});
            localStorage.setItem('daftar_data', JSON.stringify(daftar_data));
            } 
        }
    }

   
}

【问题讨论】:

标签: javascript arrays json duplicates local-storage


【解决方案1】:

如果我理解你的问题和代码正确,你基本上有一个对象数组,其中每个对象都有键 resis

如果是这样,下面的代码可能会有所帮助

 var valueArray = ar.map(function(item) {
    return item.resis;
 })

 // To check for duplicate
 if(valueArray.indexOf(value) !== -1) {
     // Duplicates
 } else {
     // No duplicate
 }

在你的情况下, ar 将是 daftar_data。 我真的不确定你的value 是什么。是resi 吗? 基本上,你应该尝试用上面的代码替换你的 for 循环。

【讨论】:

  • 所以 localStorage 已经有数据了,我想将 localStorage 中的数据与用户输入的数据进行比较,如果用户输入了现有的 dilocalstorage 不会保存
  • 编辑了答案。
  • 回答更多详情
  • 您可以通过在问题中提供更多详细信息来帮助我。您能否提供daftar_array 的样本。 resi_or_code也一样
【解决方案2】:

到目前为止,最简单的方法是使用Array.sort() 对数组进行简单排序。这会很好地执行并将您的重复检查减少到一个简单的 for 循环,该循环将每个值与其相邻值进行比较。

试图避免排序的解决方案几乎肯定会非常糟糕地扩展。

所以回顾一下并展示一些代码:

daftar_data.sort();
for (var index = 0; index < daftar_data.length - 1; index++)
{
  if (daftar_data[index] === daftar_data[index+1]) {
    // Found a duplicate
  }
}

如果对象的自然排序顺序不适合您,请为排序函数提供一个函数,如下所示:

daftar_data.sort(function(a, b) {
  // return any value > 0 if a is greater, < 0 if b is greater 
  // and 0 if they are equal. 
});

请注意,在此表单中,您实际上可以在比较函数中检查重复项。

【讨论】:

  • 我看不到,因为您没有提交 JSON。但实际上,您在第 14 行分配了一个空数组,并且还使用了 push()。所以它看起来像一个数组。
  • 你的解决方案如何?
  • 我的解决方案是如上所述对数组进行排序。然后一个简单的 for 循环找到重复项。
猜你喜欢
  • 2017-09-19
  • 2018-09-09
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2013-05-01
相关资源
最近更新 更多