если внутри цикла for - PullRequest
       2

если внутри цикла for

0 голосов
/ 25 февраля 2019

Проверка на равенство двух объектов:

Я не уверен в том, как протекает мой код и как я могу это исправить.

Внутри функции areEqual я проверяю «значение» двух объектов.

если они равны -> isEqual = true -> цикл должен продолжаться, если одно из значений не равно -> isEqual = false и отрыв от цикла.

Но я неполучить желаемые результаты.Какую логику я точно здесь не понимаю?

    function Address (street, city, zipCode) {
    this.street = street; 
    this.city = city; 
    this.zipCode = zipCode; 
}

let address1 = new Address('a', 'b', 'c'); 
let address2 = new Address('a', 'd', 'c'); 


//checking for equality between two objects
function areEqual(address1, address2){  
    let isEqual = true; 
        for(let key in address1) {
            if(address1[key] === address2[key])
                isEqual = true; 
            else
                isEqual = false
                break; 
        }
    if(isEqual) return 'They are equal'; 
        else return 'They are not equal'; 

}

console.log(areEqual(address1, address2)); 

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

У вас есть значение по умолчанию isEquls: true, поэтому, если какая-либо из пар ключей будет не равна, установите isEquls в false и прервите цикл:

function Address (street, city, zipCode) {
    this.street = street; 
    this.city = city; 
    this.zipCode = zipCode; 
}

let address1 = new Address('a', 'd', 'd'); 
let address2 = new Address('a', 'd', 'c'); 


//checking for equality between two objects
function areEqual(address1, address2){  
    let isEqual = true; 
        for(let key in address1) {
            if(address1[key] !== address2[key])
            {
                isEqual = false
                break; 
            }
        }
    if(isEqual) return 'They are equal'; 
        else return 'They are not equal'; 

}

console.log(areEqual(address1, address2));
0 голосов
/ 25 февраля 2019

Ваш код эквивалентен:

if (address1[key] === address2[key])
  isEqual = true;
else 
  isEqual = false

break;

Вы должны заключить ваше условие else в {}.В настоящее время он выходит из цикла на первой итерации

function Address(street, city, zipCode) {
  this.street = street;
  this.city = city;
  this.zipCode = zipCode;
}

let address1 = new Address('a', 'b', 'c');
let address2 = new Address('a', 'd', 'c');

let address3 = new Address('x', 'y', 'z');
let address4 = new Address('x', 'y', 'z');

//checking for equality between two objects
function areEqual(address1, address2) {
  let isEqual = true;
  for (let key in address1) {
    if (address1[key] === address2[key])
      isEqual = true;
    else {
      isEqual = false
      break;
    }
  }
  if (isEqual) return 'They are equal';
  else return 'They are not equal';

}

console.log(areEqual(address1, address2));
console.log(areEqual(address3, address4));

Вы можете избежать подобных ошибок, если отформатируете свой код.Каждый редактор кода будет иметь ярлык для этой функции.

Примечание : поскольку у вас есть функция конструктора для Address, этот код будет работать.Но обратите внимание, что это просто проверяет, имеют ли ключи в address1 то же значение, что и address2.Если вы сравните пустой объект, подобный этому, areEqual({}, address2), он будет записывать They are equal, потому что он никогда не входит в цикл for.Таким образом, вы можете добавить дополнительную проверку, если Object.keys(address1).length совпадает с address2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...