Как проверить, симметричны ли 2 строки?

у меня есть 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.info(isSymmetric(r));

как определить симметричность?

Daniel A. White 15.05.2019 20:57

Грязный метод: isSymmetric = r => r.toString() === r.slice().reverse().toString()

Niet the Dark Absol 15.05.2019 20:59

пожалуйста, добавьте, что означает симметричный в этом контексте.

Nina Scholz 15.05.2019 21:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте 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]));
Ответ принят как подходящий

Вы можете сделать что-то вроде этого:

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

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

Идея состоит в том, чтобы пройтись по массиву и для каждого индекса сравнить его с его «сестрой» с правой стороны. Если кто-то не тот, они возвращаются false.

Вы можете начать с 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.info(isSymmetric(v))
);

Другие вопросы по теме