从数组中移除特定元素导致问题

3

我有一个数组,如果我删除一个特定的元素,它将被删除,但是如果稍后我再次删除另一个元素,则新选择的元素将被删除,但以前删除的元素将存在,如图所示。 enter image description here

请参考上图,首先我从数组中删除了phone,然后我删除了Account Disabled,但在第二个表格中,先前删除的元素phone仍然存在。

var selectedOpts = $('#lstBox1 option:selected');

var text = selectedOpts.val();

var colData = [];

this.firmData.forEach(function (dta) {
    colData.push(dta.DisplayName);
})

const removeItem = value => colData.filter(item => item !== value)
    console.table(removeItem(text))
    console.log(text);

更新

实际需求

enter image description here

我需要在移动数据的同时将其从数组中删除,目前只能追加这些值,但无法从数组中删除它们。

第一列HTML

<div class="menu">
    <select multiple="multiple" id='lstBox1' >
    </select>
</div>

第一列JS代码

 self.firmData.forEach(function (data) {                  
   $("#lstBox1").append($('<option class="items">').text(data.DisplayName).attr('value', data.DisplayName));                        
  });

第二列HTML

<div class="menu">
    <select multiple="multiple" id='lstBox2' >
    </select>
</div>

第二列的JS代码

self.data.forEach(function (data) {
 $("#lstBox2").append($('<option class="items">').text(data.columnsexpo).attr('value', data.columnsexpo));
 });
 "click #btnRight": function(e){
      var selectedOpts = $('#lstBox1 option:selected');
      var text = selectedOpts.val();

      $('#lstBox2').append($(selectedOpts).clone())
      this.data.push(columnsexpo: text);
   }

  "click #btnLeft": function(e){
      var selectedOpts = $('#lstBox2 option:selected');
      var text = selectedOpts.val();

      $('#lstBox1').append($(selectedOpts).clone())
      this.data.push(columnsexpo: text);
   }

你能添加一个可用的 Fiddle 吗? - prasanth
因为removeItem不会改变colData,它只是过滤掉没有你不想要的项目并返回一个数组。 - Mouser
看起来你正在从不同的数据集构建数组(colData),并且是从 colData 中删除而不是从原始数据中删除,因此每次运行代码时,都会得到一个新的数据数组。 - Valeklosse
@Valeklosse 即使我从原始数据中删除它,我仍然面临相同的问题。 - chethu
1
@chethu https://jsfiddle.net/2eovy46g/ 我不知道这是否适用于您当前的项目,但我使用了一点jQuery,这只是演示如果从firmData中删除它,它将不再具有先前删除的内容 - Valeklosse
2个回答

2

从问题描述中不确定你想干什么,但是下面的代码可以删除原始数组中的指定元素。请注意,这段代码可能会包含错误/缺陷,但是Array.prototype.splice可以从数组中移除元素。

"最初的回答"

var selectedOpts = $('#lstBox1 option:selected');

var text = selectedOpts.val();

var colData = [];

this.firmData.forEach(function (dta) {
    colData.push(dta.DisplayName);
})

function findItem(item) {
  return item == text;
}

colData.splice(colData.findIndex(findItem), 1);
console.table(colData)
console.log(text);

我不知道问题出在哪里,但根据你的解决方案应该可以解决,但我仍然遇到了相同的问题。 - chethu
好的,也许你可以展示一下这些代码周围的更多内容……我怀疑你是在循环中调用这段代码,如果是这样的话,解决方案需要稍作修改。 - Shaheed
我所面临的问题仅围绕这些代码。 - chethu
这显然不对,这段代码并不是独立运行的,想想看 - 页面内容、用户交互、DOM 状态、JS 中的全局变量都会对这段代码产生某些影响,如果我们在这里找不到问题,那么我们需要查看更多的代码行来了解你所做的可能导致问题的事情。 - Shaheed
请看我的问题,我已经更新了所有内容,这就是我真正的需求。 - chethu

0

.filter 不会从数组中删除项目

要从数组中删除项目,您可以执行以下操作

colData.splice(colData.indexOf(text), 1)

在线演示

var colData = ['a', 'b', 'c', 'd'];

const removeItem = value => {
  let arr = colData.splice(colData.indexOf(value), 1);
  return arr;
}

removeItem('a');
removeItem('d');

console.log(colData);


我仍然面临着与我的问题相同的问题,即删除当前元素并添加先前删除的元素。 - chethu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接