JavaScript.如何比较输入数组



我已经被这个问题困住了 3 天了......有人请帮助我。

挑战 5
构造一个函数intersection,用于比较输入数组并返回一个新数组,其中包含在所有输入中找到的元素。

function intersection(arrayOfArrays) {
}
console.log(intersection([[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]]));
// should log: [5, 15]

将数组简化为计数映射,并将值作为键。将地图传播到条目。对地图的条目使用Array.filter()删除所有条目,该值不等于arrayOfArrays长度。使用Array.map()从条目中提取原始编号:

function intersection(arrayOfArrays) {
return [...arrayOfArrays.reduce((r, s) => {
s.forEach((n) => r.set(n, (r.get(n) || 0) + 1));

return r;
}, new Map())]
.filter(([k, v]) => v === arrayOfArrays.length)
.map(([k]) => k);
}
console.log(intersection([[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]]));

您可以通过检查其他数组是否包含该值来过滤来减少数组。

这适用于具有唯一值的数组。

Array#reduce

如果未提供initialValue,则accumulator将等于数组中的第一个值,currentValue将等于第二个值。

回调

a.filter(v => b.includes(v))

过滤器数组a。如果数组b包含a的值,则此值v包含在下一次迭代的accumulator中或作为最终结果。

accumulator            currentValue           new accumulator
a                       b                    result
--------------------    --------------------    --------------------
[     5, 10, 15, 20]    [15, 88,  1,  5,  7]    [             5, 15]
[             5, 15]    [ 1, 10, 15,  5, 20]    [             5, 15]

function intersection(arrayOfArrays) {
return arrayOfArrays.reduce((a, b) => a.filter(v => b.includes(v)));
}
console.log(intersection([[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]]));

首先尝试找出两个数组的交集,即base problem。然后尝试为可变数量的数组建立作为交集参数传递的数组。您可以使用reduce()来执行此操作。

function intersectionOfTwoArrays(arr1, arr2)
{
return arr1.filter(x => arr2.some(y => y === x)); 
}
function intersection(...arrayOfArrays)
{
	return arrayOfArrays
	       .reduce((a, b) => intersectionOfTwoArrays(a, b));
}
intersection(
[5, 10, 15, 20], 
[15, 88, 1, 5, 7], 
[1, 10, 15, 5, 20]
);

您可以遍历数组数组中的第一个数组,并检查所有其他数组中存在哪个值。

下面是一个示例:

function intersection(input) {
let firstArray = input[0];
let restOfArrays = input.splice(1);
return firstArray.filter(v => restOfArrays.every(arr => arr.includes(v)));    
}
const input = [[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]];
const result = intersection(input);
console.log(result);

即使同一数组中有重复项也有效.. 就像在我的例子中一样,在 arrayEle[1] 中添加了两次 5;

var arrayEle = [[5, 10, 15, 20], [15, 88, 1, 5, 5], [1, 10, 15, 5, 20]]
var startIndex = 1;
var newArray = [];
for (var x = 0; x < arrayEle[0].length; x++) {
var temVal = 1;
var value;
for (var y = 1; y < arrayEle.length; y++) {
for (var z = 0; z < arrayEle[y].length; z++) {
if (arrayEle[y][z] == arrayEle[0][x]) {
temVal++;
value = arrayEle[y][z];
break;
}
}
}
if (temVal == arrayEle.length) {
newArray.push(value);
console.log(value);
}
}
console.log(newArray);

//log: [5, 15]

我认为你想要共同的元素。让我向您展示如何:

var Array1 = [5, 10, 15, 20]
var Array2 = [15, 88, 1, 5, 7]
var Array3 = [1, 10, 15, 5, 20]
var found = []
var Final = []
var c = 1;e = 1;
for (i = 1;i<=Array1.length;i++){
for (k = 1;k<=Array2.length;i++){
if (Array1[i] == Array2[k]){
Found[c] = Array[i];
c++;
}
}
}
for (n = 1;n <= Found.length ; n++){
for (m = 1;m <= Array3.length ; n++){
if (Found[n] == Array3[m]){
Final[e] = Found[n]
e++; 
}
}
}
//the Array Final Contains 5 , 15

相关内容

  • 没有找到相关文章

最新更新