javascript - 如何在不重新索引数组键的情况下在 JQuery 中添加和删除数组

标签 javascript jquery html arrays

当我点击任何复选框而不是主数组中的新数组追加(推送)时,我有一个复选框列表。如果取消选中而不是删除但不更改当前数组的任何索引。

解释:-

喜欢:- 当我点击数组中的第一个复选框时喜欢

0: ["2"]

喜欢:- 当我点击第二个复选框而不是数组时

0: ["2"]
1: ["3"]

喜欢 :- 当我点击四个复选框而不是数组时喜欢

0: ["2"]
1: ["3"]
2: ["5"]

如果我首先取消选中我需要的数组,那么在取消选中复选框之后

1: ["3"]
2: ["5"]

我再次点击第一个复选框而不是需要数组链接

1: ["3"]
2: ["5"]
3: ["2"]

不需要改变任何数组索引键

https://jsfiddle.net/tx63yjhg/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" value="1" />
<input type="checkbox" value="2" />
<input type="checkbox" value="3" />
<input type="checkbox" value="4" />
<input type="checkbox" value="5" />
<input type="checkbox" value="6" />
<input type="checkbox" value="7" />

<script type="text/javascript">
var values = [];
var new_value = [];

$("input").on("change", function() 
{
  var $this = $(this);
  
  if ($this.is(":checked")) 
  {
  	var new_data = [$this.val()];
  	new_value.push(new_data);
  }
  else 
  {	
  	//remove array when uncheck checkbox
  }
  console.log('new_value',new_value);
});
</script>

如何删除数组并重新添加?

最佳答案

我不确定您是否使用数组数组实现了相同的效果。您可以改为尝试使用如下所示的对象。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" value="1" />
<input type="checkbox" value="2" />
<input type="checkbox" value="3" />
<input type="checkbox" value="4" />
<input type="checkbox" value="5" />
<input type="checkbox" value="6" />
<input type="checkbox" value="7" />

<script type="text/javascript">
var values = [];
var new_value = {};
var counter = 0;

$("input").on("change", function() {
  var $this = $(this);
  
  if ($this.is(":checked")) {
    new_value[counter++] = [$this.val()];
  } else {	
    Object.entries(new_value).forEach(([k,v]) => {
      if(v.includes($this.val())) delete new_value[k];
    });
  }
  console.log('new_value',new_value);
});
</script>

编辑

添加

new_value[counter++] = {id1: 100, id2: 200, "id3": 300,"value":474}; // e.g. object

删除

let valueToBeRemoved = 234; // e.g. value to be removed

Object.entries(new_value).forEach(([k,v]) => {
  if(v.value === valueToBeRemoved) delete new_value[k];
})

编辑 2

for (var k in new_value) {
    if(new_value[k].value === valueToBeRemoved) delete new_value[k];
}

关于javascript - 如何在不重新索引数组键的情况下在 JQuery 中添加和删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53296364/

相关文章:

javascript - 如何从 div 调用函数并渲染返回的 json 对象?

javascript - 防止呈现给定日期之前发生的事件

javascript - Try Catch 无法与 Promise 和 Redux Thunk 一起使用

javascript - 使用 jquery 的按钮的奇怪行为

javascript - 使用 JavaScript 从本地文件读取和修改 HTML

javascript - 如何使用脚本标签进行 jQuery .load()

javascript - 了解 javascript 的范围界定 - 通过一个简单的 Backbone 示例

javascript - 连续点击事件

jQuery - 如何检测有多少项,然后为它们分配一个类

javascript - 如果花费太多时间,Jquery 加载函数会显示错误消息