2016-01-08 3 views
0

Я пытаюсь написать функцию для сравнения имен свойств, но я не уверен, как это сделать. Это то, что я пробовал, и он не работает должным образом.Сравнение имен свойств в JavaScript

function propCompare(objA, objB) { 
    // assumes both objects have same length 
    for (var prop in objA) { 
     if (objB[prop] === undefined) 
      return false; 
     else { 
      return true; 
     } 
    } 
} 

То, что я пытаюсь получить, если objA имеет свойство, которое objB не имеет, то не беспокойтесь проверять дальше, а просто вернуть false. Если все соответствует, верните true.

+2

Объекты не имеют длины. Кроме того, вероятно, вы должны использовать 'Object.keys' для итерации только собственных свойств. Два объекта могут иметь одни и те же собственные свойства, но могут иметь разные свойства в цепочке прототипов. – elclanrs

+0

«Если все соответствует, верните true» - верните true; должен быть перемещен за петлю. В противном случае вы проверяете, совпадает ли первое свойство objA с первым из objB – xoxox

+0

. Так что все свойства в B должны быть в A? – epascarello

ответ

3

Во-первых, вы возвращаетесь в первую итерацию цикла. Вместо этого возвращайтесь, если вы обнаружите неудачное совпадение.

Во-вторых, используйте оператор in вместо проверки на undefined.

function propCompare(objA, objB) { 
    for (var prop in objA) { 
     if (!(prop in objB)) 
      return false; 
     } 
    } 
    return true; 
} 

Так что теперь первый раз свойство находится в objA, что не существует в objB, то функция вернет false немедленно.

В противном случае, это будет разрешено пройти через весь цикл, а затем вернуться true в конце, потому что никакие свойства не были найдены


Если вы не хотите, чтобы рассмотреть вопрос о наследуемых свойств , затем замените !(prop in objB) на !objB.hasOwnProperty(prop).

Смежные вопросы