【问题标题】:Is there a way to store data to a json array without removing the previously stored data in the json array in javascript?有没有一种方法可以将数据存储到 json 数组中,而无需删除 javascript 中 json 数组中先前存储的数据?
【发布时间】:2020-07-08 08:15:00
【问题描述】:

我正在尝试实现一种从输入框中获取数据并将数据发送到 json 数组的方法,我实现了它,但是在推送新数据时,数组中的先前数据被删除了。我希望所有数据都存储在 json 数组中。如何在 javascript 或 jquery 中实现这一点。以下是我尝试过的。

<script>
  $(document).ready(() => {
    $('#submit').click(() => {
      var objKey = 0;
      var person = [];

      var name = $('#name').val();
      var age = $('#age').val();
      var address = $('#address').val();
      objKey++;
      var obj = {
        'id': objKey,
        'name': name,
        'age': age,
        'address': address
      }

      var hasMatch = false;

      if (name === '' || age === '' || address === '') {
        alert('Fields should not be null');
        return false;
      } else {
        var index = 0;
        if (index < person.length) {
          ++index

          var animal = person[index];

          if (animal.name == obj.name) {
            hasMatch = true;
            alert('oops');
            return false;
          } else {
            person.push(obj);
            buildTable(person)
            console.log(person);
            return false

          }
        } else {
          person.push(obj);
          buildTable(person)
          console.log(person);
          person += person
          return false
        }

      }

    });

    function buildTable(data) {
      var table = document.getElementById('myTable')

      for (var i = 0; i < data.length; i++) {
        var row =
          `<tr class="record">
             <td>${data[i].id}</td>
             <td>${data[i].name}</td>
             <td>${data[i].age}</td>
             <td>${data[i].address}</td>
             <td><input type="button" title="Click to remove item" value="delete" /></td>
          </tr>`
        table.innerHTML += row`enter code here`
      }
    }
  })
</script>

【问题讨论】:

  • JSON 是一种用于数据交换的文本符号(More here.) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。

标签: javascript jquery arrays json


【解决方案1】:

嘿嘿,如果我没听错的话,问题出在你的数组上:

var person = [];

每次单击提交按钮时都会(重新)初始化。 因此,您以前的数据丢失了。

尝试更改以下代码:

  $(document).ready(() => {
   $('#submit').click(() => {
    var objKey = 0;
    var person = [];

到:

  $(document).ready(() => {
   var person = [];
   $('#submit').click(() => {
    var objKey = 0;
   

通过在就绪块中声明人员,您的提交事件可以访问此变量。 但不会在您每次单击按钮时覆盖它。

希望对你有帮助

【讨论】:

  • 是的,它有帮助,但我仍然有问题。我希望它就像单击表中的删除按钮时一样,该索引中的元素应该被删除并且表从 person 数组中重新获取数据。提前致谢!
【解决方案2】:

问题是您在每次点击时都会创建一个 数组。将您的 person 变量移到点击处理程序之外:

$(document).ready(() => {
  var person = [];            // <==============
  $('#submit').click(() => {
    var objKey = 0;

如果你这样做,那么就会有一个数组,person.push 将添加到该数组中。

【讨论】:

  • 我试过了,还是不行,第一次推送成功后出现错误
  • 是的,它有帮助,但我仍然有问题。我希望它就像单击表中的删除按钮时一样,该索引中的元素应该被删除并且表从 person 数组中重新获取数据。提前致谢!
【解决方案3】:

问题在于,单击时您将数组“person”重新定义为空数组。你应该在代码中定义它。

【讨论】:

  • 我试过了,但还是不行,第一次成功推送后出现错误——
  • 您能告诉我们有关此错误的详细信息吗?这行person += person 的范围是什么?
  • 是的,它有帮助,但我仍然有问题。我希望它就像单击表中的删除按钮时一样,该索引中的元素应该被删除并且表从 person 数组中重新获取数据。在此先感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2013-03-26
  • 2012-06-26
  • 1970-01-01
  • 2020-02-04
  • 2020-02-23
相关资源
最近更新 更多