javascript 从一个数组中 删除 一个数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 从一个数组中 删除 一个数组相关的知识,希望对你有一定的参考价值。

用javascript从数组arrayA中删除所有在数组arrayB中出现的元素..怎么实现?
要代码示例!!

<script type="text/javascript">
var a =["1","2","4","5"];
var b=["1","2","3"];
for(var i=0,len=b.length;i<len;i++)
if(a.indexOf(b[i])>=0)
for(var j=0,alen=a.length;j<alen;j++)
if(a[j]==b[i])
delAElem(a,j);




alert(a);
function delAElem(array,num)
for(var i=num,len=a.length;i<len-num;i++)
array[i]=array[i+1];

a.length--;

</script>
思路是先找到重复元素在a数据中的index,之后再将a数组元素向前移动,最后修改数组长度
参考技术A 用两层for循环,先循环a,在a里面循环b,在b里面判断如果有出现就删 参考技术B 看看这个测试结果:
var a = [1,2,3,4],
b = [3,4];
for(var i=0,len=a.length;i<len;i++)
for(var j=0,len2=b.length;j<len2;j++)
if(a[i]==b[j])
a= a.slice(0,i).concat(a.slice(i+1,a.length));



//a的值:[1,2]

从javascript中的多维数组中删除一列

【中文标题】从javascript中的多维数组中删除一列【英文标题】:Deleting a column from a multidimensional array in javascript 【发布时间】:2014-09-08 20:18:20 【问题描述】:

我有一个二维数组:

var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]

我想删除该数组的一整列(即删除每个数组中的第三个元素)。

有here 和here 的解决方案,但它们都不是javascript,所以我无法关联这些情况。

解决这个问题的最佳方法是什么?我不想使用 .splice() 因为在某些情况下我会删除多个列,并且 .splice() 方法会改变数组的长度,所以我最终会越界访问。

谢谢!

【问题讨论】:

所以你最终会得到[["a", "b"],["a", "b"],["a", "b"]]? 是否要删除例如每个中的第三项...(截断内部数组的长度)?还是要将其设置为 null 或空字符串? - 不清楚。 没有自动功能。 JS 中的“多维”数组只是数组的数组。您必须遍历父数组并从每个子数组中删除适当的元素。 “列”是一种人类便利,它不会直接转化为它们在实际 JS 引擎中的实际工作方式。 我想截断长度。 (例如,删除每三个元素会给我: [["a", "b"],["a", "b"],["a", "b"]] 你试过删除吗? 【参考方案1】:

截取有用的代码,创建数组的独立副本

map 中使用slice 方法。这是一个例子:

let arrayA = ['a', 'b', 'c', 'd']

let arrayB = arrayA.map((val) => 
      return val.slice()
)

arrayB[2] = 'Z';

console.log('--------- Array A ---------')
console.log(arrayA)

console.log('--------- Array B ---------')
console.log(arrayB)

注意:Angular 10 中,我使用了不同的方法来获取数组的独立副本,但都失败了。以下是其中一些:

arrayB.push(arrayA) // failed    
arrayB = Object.create(arrayA) // failed    
arrayB = arrayA.splice() // failed

所有失败的方法都在复制引用和数据。

【讨论】:

【参考方案2】:

尝试使用slice。它不会改变你原来的array

var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]

var x = array.map(function(val) 
  return val.slice(0, -1);
);

console.log(x); // [[a,b],[a,b],[a,b]]

【讨论】:

【参考方案3】:

遍历数组,拼接每个子数组:

var idx = 2;
for(var i = 0 ; i < array.length ; i++)

   array[i].splice(idx,1);

JSFiddle.

编辑: 我看到你不想使用splice,因为越界问题和数组长度变化。 所以:

1.您可以检查是否超出范围并跳过切片。 2.您可以创建一个要删除的索引数组,然后简单地从该数组中没有出现的索引创建新数组(而不是删除,创建具有相反条件的新数组)。

类似这样的:

var array = [
    ["a", "b", "c"],
    ["a", "b", "c"],
    ["a", "b", "c"]
];

var idxToDelete = [0,2];

for (var i = 0; i < array.length; i++) 
    var temp = array[i];
    array[i] = [];
    for(var j = 0 ; j < temp.length ; j++)
        if(idxToDelete.indexOf(j) == -1) // dont delete
        
            array[i].push(temp[j]);
        
    

New JSFiddle.

【讨论】:

关于他的“越界”问题,您可以按降序删除索引...也就是说,从 highest 索引开始删除并正常工作一路下来。【参考方案4】:

此函数不使用拼接,它会删除您想要的任何列:

function removeEl(array, remIdx) 
 return array.map(function(arr) 
         return arr.filter(function(el,idx)return idx !== remIdx);  
        );
;

希望这就是你要找的东西

【讨论】:

【参考方案5】:

为您的解决方案使用map 函数和splice 函数。像这样

var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]];

array = array.map(function(item)
        // the 0,2 tells the splice function to remove (skip) the last item in this array
        return item.splice(0,2);
);

console.log(array);
// [["a", "b"],["a", "b"],["a", "b",]];

不要使用delete 从 javascript 数组中删除项目。原因是 delete 会扔掉项目,但不会更新内部长度变量。

例子

var array = ["a", "b", "c"];

delete array[3];
console.log(array);
// ["a", "b"]
console.log(array.length);
// 3

array = array.splice(0,2);
console.log(array);
// ["a", "b"]
console.log(array.length);
// 2

使用splice 设置正确的长度并删除数组的项。

【讨论】:

【参考方案6】:

splice 很酷。它在删除东西时调整数组的大小,这样你就不会得到空值。所以使用 splice 你只需要遍历每一行并删除正确的元素。

var removeCol = function(arr2d, colIndex) 
    for (var i = 0; i < arr2d.length; i++) 
        var row = arr2d[i];
        row.splice(colIndex, 1);
    

http://jsfiddle.net/eB8LD/

【讨论】:

以上是关于javascript 从一个数组中 删除 一个数组的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/jQuery - 将项目推送到数组并从数组中删除

在 JavaScript 中从数组中删除一个项目

jQuery / Javascript从对象数组中删除一个对象[重复]

如何从javascript中的数组中删除最后一个索引元素? [复制]

javascript中,知道一个值,如何删除数组中的这个值的元素。

如何从 JavaScript 中的数组中删除元素?