如何在 JQuery 中添加和删除数组而不重新索引数组键

Posted

技术标签:

【中文标题】如何在 JQuery 中添加和删除数组而不重新索引数组键【英文标题】:How add and remove array without re-index array key in JQuery 【发布时间】:2019-04-17 04:37:44 【问题描述】:

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

解释:-

Like:- 当我点击第一个复选框而不是数组时

0: ["2"]

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

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>

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

【问题讨论】:

你为什么有数组?为什么不用一个简单的扁平数组来代替? @NikhilAggarwal :- 我在数组中有多个值,所以我需要数组内的数组 好的。那你能贴出真实的数组吗?在上面发布的示例中,删除值后您希望数组为1: ["3"], 2: ["5"]new_value[0]的值是多少 @NikhilAggarwal :如果删除 0 索引而不是删除 0 索引并且此键未分配任何数组索引 看看这个例子 - let arr = [1,2]; delete arr[0]; console.log(arr);。看到数组索引仍然是空值。 【参考方案1】:

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

<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];

【讨论】:

如果这样的数组值比 ?? new_value[counter++] = id1: 100, id2: 200, "id3": 300,"value":value474; @PraveenKumar - 你可以做到。但是,我们需要更新我们的删除代码。对象的哪个属性定义了对象的唯一性? Nikhil - 你能用对象数组删除更新你的答案吗 @PraveenKumar - 我已经用添加/编辑块更新了我的答案。你能检查一下吗 @PraveenKumar - 很高兴帮助你:)【参考方案2】:

很简单:

var values = [];

$("input").on("change", function() 

  var $this = $(this);
  var new_value = [];
  
  if ($this.is(":checked")) 
  
  	var new_data = [$this.val()];
  	new_value.push(new_data);
  
  console.log('new_value',new_value);
);

【讨论】:

以上是关于如何在 JQuery 中添加和删除数组而不重新索引数组键的主要内容,如果未能解决你的问题,请参考以下文章

如何删除数组元素,然后重新索引数组?

如何使用 jquery 从 asp.net 视图模型中动态删除行而不删除集合中的其余下一个对象

如何重新创建“索引超出数组范围”将项目添加到字典?

如何删除桥头而不出现错误?

使用 jquery 从数组列表中添加和删除数组项

jquery 向空数组中添加元素,重复的就不添加到空数组中请问该如何编写