如何检查2行是否对称?

时间:2019-05-15 18:55:30

标签: javascript

我有2行需要检查Java脚本是否对称

第1行[2、7、9、9、7、2]第2行[5 7 3 3 7 5]你会怎么做?

var r = [[5, 7, 3, 3, 7, 5], [2, 7, 9, 9, 7, 2]];

function isSymmetric(r) {
// convert to object
var rel = {}
for (var i = 0; i < r.length; i++) {
    if (!(r[i][0] in rel)) rel[r[i][0]] = {};
    rel[r[i][0]][r[i][1]] = true;
}
// Test to see if opposite relation is in object
for (var a in rel) {
    for (var b in rel[a]) {
        if (!rel[b] || !rel[b][a]) return false;
    }
}

return true;
}

console.log(isSymmetric(r));

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

let isSymmetric = arr => {
  for(var i=0; i < arr.length; i++) {
    if(arr[i] !== arr[arr.length - (i+1)])
      return false
  }
  return true
}

console.log(isSymmetric([5, 7, 3, 3, 7, 5]))
console.log(isSymmetric([1, 7, 9, 9, 7, 2]))

这个想法是循环遍历数组,并为每个索引从右侧将其“兄弟”进行比较。如果一个不相同,它们将返回false

答案 1 :(得分:0)

使用lodash

var row = [2, 7, 9, 9, 7, 2];
var halves = _.chunk(row, _.ceil(row.length / 2));
var result = _.isEqual(halves[0], _.reverse(halves[1]));

答案 2 :(得分:0)

您可以从第0个索引开始,然后将该值与其对称对(length - 1 - i)进行比较,如果它们不相同,则return false。您应该停在中间的length / 2

let values = [
 [5, 7, 3, 3, 7, 5], 
 [2, 7, 9, 1, 9, 7, 2],
 [5, 7, 3, 3, 7, 1]
];


function isSymmetric(arr) {
  for (let i = 0; i < arr.length / 2; i++) {
    if (arr[i] !== arr[arr.length - 1 - i]) {
      return false;
    }
  }
  
  return true;
}

values.forEach(v => 
  console.log(isSymmetric(v))
);