【问题标题】:Searching items on an array JSON [duplicate]在数组 JSON 上搜索项目 [重复]
【发布时间】:2019-11-11 15:09:14
【问题描述】:

我正在研究 vanilla js,因为我根本不允许使用 jQuery,所以我几乎是初学者,所以我想要一个指南,我正在尝试从 JSON 文件中获取电子邮件地址我'已经尝试做一个循环,但它永远不会到达属性电子邮件并显示它。

我已经试过了:

我搜索输入文本并获取值并将其存储在 textValue 中,然后尝试使用 for-loop 查找该值。

var textValue = document.getElementById("email").value;
  for(var i = 0; i < localStorage.getItem(jsondata.data.length); i++)
{
  if(jsondata[i].email == textValue)
    {
      console.log(jsondata[i].email) 
    }
}
 };

这是 JSON 的外观:

{
  "data": [
    {
      "email": "nicobes@gmail.com",
      "name": "Nickole Beatrice Smith",
      "address": "398 Pleasant Pine Cir. Harrington, DE 19123",     
      "age": 45,
      "notes": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ",
      "phoneNumbers": [
        {
          "phone": "(302) 792-8434"
        },
        {
          "phone": "(302) 792-1134"
        },
        {
          "phone": "(302) 792-2234"
        },
        {
          "phone": "(302) 792-3334"
        }
      ],
      "relatives": [
        {
          "name": "Susan M Smith"
        },
        {
          "name": "Malcolm W Smith"
        },
        {}
      ]
    }

【问题讨论】:

    标签: javascript html json


    【解决方案1】:

    如果您有非唯一电子邮件,请尝试使用此代码。过滤器方法处理数组中的所有项目,当内部回调函数(row=&gt;row.email==textValue)返回truthy时,该行被推入返回值,而其他行则没有。这是按电子邮件地址过滤的

    var jsondata = json.data;
    var textValue = document.getElementById("email").value;
    var found = jsondata.filter(row=>row.email==textValue);
    console.log(result); // an array of object
    

    如果电子邮件是唯一的,请使用查找方法。 find 方法回调与前一个相同,但不同的是,它在找到第一个真值时退出。另一个区别是返回值。这个返回一个对象,搜索到的对象,但不是对象数组。

    var jsondata = json.data;
    var textValue = document.getElementById("email").value;
    var found = jsondata.find(row=>row.email==textValue);
    console.log(result); // an object
    

    【讨论】:

      【解决方案2】:

      在你的 for 循环语句中,你应该搜索 jsondata.data[i] 而不是 jsondata[i]

      【讨论】:

      • 是的,现在可以了,我可以在 json.data[i].email 中看到电子邮件,但我认为我正在做的另一个错误是尝试从本地存储中获取长度,因为不是完全循环,它停留在 [0] 中。
      • 您可以尝试将 localStorage.getItem(jsondata.data.length) 存储在某个变量中。但我不认为这是问题,也许如果你分享更多关于 JSON 对象的信息,2-3 元素,也许我可以帮助
      【解决方案3】:

      您没有展示如何从本地存储中存储或检索数据。设置它类似于(假设数据存储在一个名为 obj 的对象中):

      localStorage.setItem('data', JSON.stringify(obj));
      

      然后去获取(取回数据,使用JSON.parse转回一个叫localData的对象):

      var localData = JSON.parse(localStorage.getItem('data'));
      

      现在你可以搜索localData了:

      for(var i=0, iLen=localData.data.length; i<iLen; i++) {
      
        if(localData.data[i].email == textValue) {
          console.log(localData.data[i].email)
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 2016-01-19
        • 2014-04-21
        • 2019-10-27
        • 2013-01-25
        相关资源
        最近更新 更多