介绍
.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 实体的一个属性,允许我们向实体添加自定义属性和方法。
要为.difference
Array 实体创建方法,我们可以使用以下结构:
// 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
在必要的时候使用,而不是每次都重写逻辑。