javascript - 如何动态更新 JavaScript 数组

标签 javascript jquery arrays

我有一个空的javascript数组(矩阵),我创建它是为了实现div的刷新。我创建了一个函数来动态地将数据放入其中。然后我创建了一个函数来更新数组(我有问题)。 数组中填充的数据是我放入 JSON 文件中的数据属性。

为了更好地理解,这是我放入 json 文件中的数据属性:

var currentAge      = $(this).data("age");
var currentDate     = $(this).data("date");
var currentFullName = $(this).data("fullname");
var currentIDPerson = $(this).data("idPerson");
var currentGender   = $(this).data("gender");

创建数组:

var arrayData   = [];

这是创建的函数,用于启动并向数组添加元素:

function initMatrix(p_currentIDPerson, p_currentGender, p_currentFullName, p_currentDate, p_currentAge) {
  var isFound = false;      
  // search if the unique index match the ID of the HTML one
  for (var i = 0; i < arrayData.length; i++) {
    if(arrayData[i].idPerson== p_currentIDPerson) {
      isFound = true;
    }
  }

  // If it doesn't exist we add elements
    if(isFound == false) {
      var tempArray = [
        { 
          currentIDPerson: p_currentIDPerson,  
          currentGender: p_currentGender, 
          currentFullName: p_currentFullName,  
          currentDate: p_currentDate, currentAge: p_currentAge
        }
      ];
      arrayData.push(tempArray);
    }
  }

这里的更新功能是我尝试过的,但它不起作用,也许我没有以正确的方式编码它。如果您能帮忙,请。

function updateMatrix(p_currentIDPerson, p_currentGender, p_currentFullName, p_currentDate, p_currentAge) {
  for (var i = 0; i < arguments.length; i++) {
    for (var key in arguments[i]) {
      arrayData[i] = arguments[i][key];         
    }
  }
}

要理解“$this”和 elm:elm 是我放置点击事件的 clickableDivs:

(function( $ ) {    
  // Plugin to manage clickable divs
  $.fn.infoClickable = function() {
    this.each(function() {
      var elm = $( this );

      //Call init function
      initMatrixRefresh(elm.attr("idPerson"), elm.data("gender"), elm.data("fullname"), elm.data("date"), elm.data("age"));

      //call function update
      updateMatrix("idTest", "Alarme", "none", "10-02-17 08:20", 10);

      // Définition de l'evenement click
      elm.on("click", function(){});
    });
  }
  $('.clickableDiv').infoClickable();   
}( jQuery ));

提前谢谢

最佳答案

嗯...我建议您使用一个对象,其中每个键都是一个人 id 来保存此列表,而不是数组。通过这种方式,您可以编写更清晰的代码,实现相同的结果,但性能更高。例如:

var myDataCollection = {};

function initMatrix(p_currentIDPerson, p_currentGender, p_currentFullName, p_currentDate, p_currentAge) {
  if (!myDataCollection[p_currentIDPerson]) {
     myDataCollection[p_currentIDPerson] = {
        currentIDPerson: p_currentIDPerson,  
        currentGender: p_currentGender, 
        currentFullName: p_currentFullName,  
        currentDate: p_currentDate,
        currentAge: p_currentAge
     };
  }
}

function updateMatrix(p_currentIDPerson, p_currentGender, p_currentFullName, p_currentDate, p_currentAge) {
  if (myDataCollection[p_currentIDPerson]) {
     myDataCollection[p_currentIDPerson] = {
        currentGender: p_currentGender, 
        currentFullName: p_currentFullName,  
        currentDate: p_currentDate,
        currentAge: p_currentAge
     };
  } 
}

根据您的业务逻辑,您可以删除 if 语句并仅保留一个函数,该函数在不存在具有指定 id 的对象时添加对象,并在存在指定 id 时更新对象。

关于javascript - 如何动态更新 JavaScript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46775375/

相关文章:

javascript - 如何禁用<select>标签,但同时绑定(bind)jquery click?

javascript - 提交ajax后清除表单值

C4047 - 间接级别 - 结构初始化

c# - 为什么我的类数组元素表现得像一个指针? (C#)

java - 纯JavaFX : convert Image to bytes Array (+ opposit operation). 出了什么问题?

javascript - 不使用 jquery 替换 img src 属性

javascript - AngularJS 使用 ng-repeat 过滤和显示日期范围

javascript - CSS3 从 'left' 属性过渡到 'right' 属性

javascript - 如何将返回值与文本结合起来

javascript - 使用 OrgChart 增加节点宽度的最佳方法