JavaScript 中两个数组的区别

介绍.includes用于确定元素是否属于数组的数组实体方法,我们将使用它来获取第一个数组的哪些元素也包含在第二个数组中。

我们将在方法内的condition()函数内使用它.filter。这个回调函数可以是箭头函数,也可以是普通函数作为回调函数。

.filter可以按字面意思用于根据条件过滤数组元素,回调函数将指示将哪些元素添加.filter或不添加到返回的数组中。

1.JavaScript中两个数字组的区域

.include是 Array 实体的一种方法。true如果作为参数传递的元素包含在调用该方法的数组中,或者false该元素不包含,则返回。举个简单的例子: 

// Input
let array = ['a', 'b', 'c', 'd'];
console.log(array.includes('a'))

输出: 

// Output
true

如果元素不属于数组,我们有: 

// Input
let array = ['a', 'b', 'c', 'd'];
console.log(array.includes('z'))

输出: 

// Output
false

该方法只能接收两个参数。如果传递多个,它可能会向作为参数传递的元素集返回错误值。如上所示,第一个参数是元素;第二个是索引或fromIndex,它是可选的。

是将在其中搜索元素fromIndex的索引。.includes让我们看看下面的例子。

// Input
let array = [1, 2, 3, 4, 5];
console.log(array.includes(3, 3))

由于值3在 index 上array[2],因此false数组有一个元素等于3从 index 开始array[3]到结束。 

// Output
false

现在对于.filter方法,它也是数组实体的一个方法,这个方法返回一个新的数组,这个数组是根据其中的condition()函数提供的条件过滤的。返回一个新数组意味着调用该方法的原始数组将保持不变。

另外,这个condition()函数是一个回调函数。回调函数作为参数传递给另一个称为“外部函数”的函数或方法。

外层函数会调用回调函数做一些事情;在.filter方法的情况下,它会调用条件回调函数根据此条件过滤数组。

.filter方法将为数组中的每个元素调用回调函数。因此.filter将有一个array.length迭代,并最终返回一个新数组,其中的几个元素等于回调函数返回值等于的迭代次数true

例如,如果我们希望所有元素的大小都等于 3,我们可以使用.filter如下所示。

// Input
let array = ['one', 'two', 'three', 'four', 'five']
array = array.filter(element => element.length == 3)
console.log(array)

在这种情况下,它接收 anelement作为参数,如果 thiselement的大小等于 3,则返回,否则true返回false。因此,该.filter方法添加element了条件结果的任何内容true。 

// Output
[ 'one', 'two' ]

正如预期的那样,该.filter方法根据element.length == 3条件返回了一个数组。将大小等于 3 的数组的每个值添加到返回的数组中。

但是我们想要获得两个数组之间的差异,这将有可能将它们放在一起。

将使用.filter我们想要获取差异的数组上的方法,并且在其中,我们将使用.include作为条件,验证调用的数组上的元素.filter是否包含在第二个元素中。让我们看看这个例子:

// Input
let array1 = ['a', 'b', 'c', 'd', 'e'];
let array2 = ['a', 'b', 'c'];
console.log(array1.filter(element => array2.includes(element)))

输出: 

// Output
[ 'a', 'b', 'c' ]

好吧,看到输出不是两个数组之间的差异,而是它们的交集。不是条件array2.includes(element)比较是否element包含在第二个数组中,如果是true,则.filter将此元素添加到结果数组中。

但是,如果我们在条件中放置一个逻辑“不”或!?这样,.filter将只添加不包含在第二个数组中的元素。检查示例

// Input
let array1 = ['a', 'b', 'c', 'd', 'e'];
let array2 = ['a', 'b', 'c'];
console.log(array1.filter(element => !array2.includes(element)))

输出: 

// Output
[ 'd', 'e' ]

最后,我们有两个数组之间的区别。

另外,如果我们想要获取所有不在交集内的元素,我们可以执行以下操作。

// Input
let array1 = ['a', 'b', 'c', 'd', 'e', 'f'];
let array2 = ['a', 'b', 'c', 'x', 'y', 'z'];
let array3 = array1.filter(element => !array2.includes(element)).
    concat(array2.filter(element => !array1.includes(element)))
console.log(array3)

在此示例中,我们需要所有不是'a','b''c'的元素,因此输出为: 

// Output
[ 'd', 'e', 'f', 'x', 'y', 'z' ]

最后,作为最后一件事,我们可以在 Array 实体的原型方法中添加我们对两个数组之间差异的解决方案。这.prototype是 Array 实体的一个属性,允许我们向实体添加自定义属性和方法。

要为.differenceArray 实体创建方法,我们可以使用以下结构:

// Input
// Declaring the prototype .difference method
Array.prototype.difference = function(array2){
    return this.filter(element => !array2.includes(element))
}
let array1 = ['a', 'b', 'c', 'd', 'e'];
console.log(array1.difference(['a', 'b', 'c']))

输出: 

// Output
[ 'd', 'e' ]

这样,我们可以.difference在必要的时候使用,而不是每次都重写逻辑。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值