当前位置: 首页 > 知识库问答 >
问题:

当阵列与另一个阵列匹配时清空阵列

葛阳华
2023-03-14

所以,我正在尝试匹配 2 个不同的数组。如果相同的单元格匹配,我想使用 .slice 方法从一个数组中删除该单元格。

编辑:我想做的是从数组1中移除一个数字,如果数组2包含一个匹配的数字。代码现在的工作方式是只删除1个条目。我要删除第一个数组中的所有条目。

array1 = [1, 2, 4, 5, 7, 10];
array2 = [1,2,4,5,6,7,8];

var misc = function deleteValues(array, arayy) {
  for(var i = 0; i < array.length; i++) {
    if ( arayy[i] == array[i]) {
      array.splice(i, 1);
    }
  }
  return array;
};

我尝试运行这个,在控制台日志下,array1没有变化。似乎拼接方法没有删除任何单元格。我搜索了SE,但没有找到任何可以帮助我的东西。

共有2个答案

訾雅畅
2023-03-14

如果值也在第二个数组中,您似乎想从第一个数组中删除项目。减法似乎很合适,因为它在数组中从右向左迭代,因此删除项目不会影响数组中后续元素的索引。使用递减循环可以实现相同的结果。

此外,我认为函数声明比表达式的赋值更好,但每个表达式都有自己的赋值。

var array1 = [1, 2, 4, 5, 7, 10];
var array2 = [1,2,4,5,6,7,8];

function deleteValues(arr0, arr1) {
  arr0.reduceRight(function(x, value, index) {
    if (arr1.indexOf(value) != -1) {
      arr0.splice(index, 1);
    }
  },'');

  // Not necessary but handy for chaining
  return arr0;
}

document.write(deleteValues(array1, array2));
祁烨
2023-03-14

< code>jsFiddle演示

问题是当你迭代时,你正在修改其中一个数组,但是你仍然使用相同的索引。最终结果是,在第一次删除后,您最终会比较错误的索引。使用两个索引,一个在移除一个项目时向下偏移,另一个简单地迭代。

var misc = function deleteValues(array, arayy) {
    for(var i = 0, j = 0; i < array.length; i++, j++) {
        if ( arayy[j] == array[i]) {
            array.splice(i--, 1);
        }
    }
    return array;
};
 类似资料:
  • 问题内容: 我想知道从ArrayList转换为Array是否安全/建议?我有一个文本文件,每行一个字符串: 我想将它们读入数组列表,然后将其转换为数组。建议这样做/合法吗? 谢谢 问题答案: 是的,将转换为是安全的。一个好主意取决于您的预期用途。您需要提供的操作吗?如果是这样,请将其保留为。否则转换掉! 输出

  • 问题内容: 我需要将几个数组合并为一个数组。描述我要寻找的内容的最好方法是将阵列“交织”为单个阵列。 例如,从数组#1中取出第一项,然后追加到最终数组中。从数组2获取项目1,然后追加到最终数组。从数组#1获得第二项并追加…等。 最终的数组如下所示: array#1.element#1 array#2.element#1。。。 “踢球者”是各个阵列可以具有各种长度。 是否有更好的数据结构要使用? 问

  • 试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式

  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]

  • 本章将解释数组的Firebase表示。 我们将使用前一章中的相同数据。 我们可以通过将以下JSON树发送到播放器的集合来创建此数据。 ['john', 'amanda'] 这是因为Firebase不直接支持Arrays,但它会创建一个以整数作为键名的对象列表。 不使用数组的原因是Firebase充当实时数据库,如果有几个用户同时操作数组,结果可能会有问题,因为数组索引不断变化。 Firebase