我基本上有两个数组,我们需要通过检查元素内部值的顺序是否在同一列上都较高,然后计数为1来进行比较。
我将通过显示示例来进一步解释
第一个数组
const arr1 = [[1, 3], [6, 5], [4, 2]]
第二个数组
const arr2 = [[1, 2], [4, 6], [3, 2]]
基于以上两个,我们将检查两者的三个元素,
第一个元素- arr1 具有 [1,3] ,而 arr2 具有 [1、2] 和如您所见,它们都在第二列上较高,应该算在内。
第二个元素- arr1 具有 [6,5] ,而 arr2 具有 [4,6] -两者在不同的列上都较高,因此不应计算。
第三个元素- arr1 具有 [4,2] ,而 arr2 具有 [3,2] -两者在第一列中都较高,也应计算在内
,上述数组的结果应为'2 found'。
到目前为止,我已经尝试过了,但是它输出5而不是2。
const arr1 = [[1, 3], [6, 5], [4, 2]]
const arr2 = [[1, 2], [4, 6], [3, 2]]
function compare(arr1, arr2) {
count = 0
arr1.forEach((e1) => arr2.forEach((e2) => {
if (e1[0] > e1[1] && e2[0] > e1[1]) {
count += 1
} else if (e1[1] > e1[0] && e2[1] > e1[0]) {
count += 1
}
})
)
return count
}
result = compare(arr1, arr2)
console.log(result)
答案 0 :(得分:1)
这是解决方案。您两次运行.forEach。
const arr1 = [
[1, 3],
[6, 5],
[4, 2]
];
const arr2 = [
[1, 2],
[4, 6],
[3, 2]
];
function compare(arr1, arr2) {
let counter = 0;
arr1.map((value, index) => {
let foo = arr1[index];
let bar = arr2[index];
if ((foo[0] > foo[1] && bar[0] > bar[1] && foo[0] != bar[1]) || (foo[0] < foo[1] && bar[0] < bar[1] && foo[0] != bar[1])) {
counter += 1;
}
})
return counter;
}
let c = compare(arr1, arr2)
console.log(c);
答案 1 :(得分:1)
您可以创建一个函数,以找到数组最大索引的那个索引。然后只需使用它来测试reduce()
中的匹配次数即可:
// get index of max value in array
const maxIndex = (arr) => arr.reduce((max, curr, i, self) => curr > self[max] ? i : max, 0)
const arr1 = [[1, 3], [6, 5], [4, 2]]
const arr2 = [[1, 2], [4, 6], [3, 2]]
let count = arr1.reduce((count, arr, i) =>
maxIndex(arr) == maxIndex(arr2[i]) // count if the index of the max is the same
? count+1
: count
, 0)
console.log(count)
答案 2 :(得分:0)
减速器绝对是必经之路。
按照您编写的内容进行操作,您只需要在一个数组中执行一个循环,然后输出该减少量即可。
const arr1 = [[1, 3], [6, 5], [4, 2]]
const arr2 = [[1, 2], [4, 6], [3, 2]]
const compare = (arr1, arr2) => arr1.reduce((r,o,i) =>
((o[0] > o[1] && arr2[i][0] > arr2[i][1]) ||
(o[0] < o[1] && arr2[i][0] < arr2[i][1])) ? r+1 : r
,0);
result = compare(arr1, arr2)
console.log(result)