根据较高的内部值比较数组

时间:2019-01-12 01:02:05

标签: javascript arrays

我基本上有两个数组,我们需要通过检查元素内部值的顺序是否在同一列上都较高,然后计数为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)

3 个答案:

答案 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)