繁体   English   中英

根据元素的 position 比较数组元素

[英]Compare elements of array based on position of elements

我需要将数组第一个 position 与最后一个 position 中的数组进行比较,第二个与倒数第二个数组进行比较,依此类推。 使用 javascript

[1, 2, 3, 4, 5, 6]

1配6,2配5,3配4

真正的交易我需要比较对象的属性如果它等于我需要比较另一个属性(注释和年份)

 function compare(arr) {
        const n = arr.length
        const mid = Math.floor(n / 2)
        const second = [];
        for (let i = 0; i < mid; i++) {
           if (arr[i].note === arr[n - i - 1].note) {
                if (arr[i].year > arr[n - i - 1].year) {
                    second.push(arr[i])
                } else {
                    second.push(arr[n - i - 1])
                }
            } else if (arr[i].note > arr[n - i - 1].note) {
                second.push(arr[i])
            } else {
                second.push(arr[n - i - 1])
            }
        }
        return second
    }
let arr = [1, 2, 3, 4, 5, 6];

for (let i = 0; i < arr.length; i++) {
    console.log(`i = ${i}, element: ${arr[i]}, mirrored: ${arr[arr.length - i - 1]}`);
}

我想这就是你需要的

Output:

i = 0, element: 1, mirrored: 6
i = 1, element: 2, mirrored: 5
i = 2, element: 3, mirrored: 4
i = 3, element: 4, mirrored: 3
i = 4, element: 5, mirrored: 2
i = 5, element: 6, mirrored: 1

您可以迭代数组的一半并将该元素与相反的元素进行比较

 function compare(arr) { const n = arr.length const mid = Math.floor(n / 2) for (let i = 0; i < mid; i++) { console.log("comparing", arr[i], "and", arr[n - i - 1]) // do your comparision } } arr = [1, 2, 3, 4, 5, 6] compare(arr) console.log('---') arr = [1, 2, 3, 4, 5] compare(arr)

为了可读性,我会创建一个 function 来比较两个项目并返回获胜者:

function compare(a, b) {
  if (a.note === b.note) {
    if (a.year > b.year) {
      return a;
    } else {
      return b;
    }
  } else {
    if (a.note > b.note) {
      return a;
    } else {
      return b;
    }
  }
}

它可以写得更紧凑,但不一定更容易阅读,如下所示:

function compare(a, b) {
  if (a.note === b.note) {
    // If the marks are equal then check the years; the greater year wins
    return (a.year > b.year) ? a : b;
  } else {
    // Otherwise the greater mark wins
    return (a.note > b.note) ? a : b;
  }
}

由于输入数组具有固定的已知大小,因此可以编写代码的 rest 来清楚地表达比较的项目:

const second = [];
second.push(compare(arr[0], arr[7]));
second.push(compare(arr[1], arr[6]));
second.push(compare(arr[2], arr[5]));
second.push(compare(arr[3], arr[4]));

如果输入数组的大小不固定,则需要循环。 使用一个变量存储第一个项目的索引,另一个存储最后一个项目的索引。 比较项目,然后将每个索引相互推进,直到它们相遇:

const second = [];
for (head = 0, tail = arr.length - 1; head < tail; head ++, tail --) {
  second.push(compare(arr[head], arr[tail]));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM