Как проверить, содержит ли родительский объект свойства дочерних объектов? Есть ли какой-либо способ без преобразования объекта в массив?

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

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

 const checked = {0: true, 1: true, 2: true, 3 true, 4: true}
const newChecked = {0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true, 7: true, 8: true, 9: true}

Object.entries(checked).every(e => Object.entries(newChecked).includes(e))
 

Комментарии:

1. Почему объекты имеют последовательные «числовые» свойства, начинающиеся с нуля? Имхо, они должны быть массивами.

Ответ №1:

Если вы просто хотите проверить только свойства, вы можете использовать Object.keys для этого

 const checked = { 0: true, 1: true, 2: true, 3: true, 4: true };
const newChecked = {
  0: true,
  1: true,
  2: true,
  3: true,
  4: true,
  5: true,
  6: true,
  7: true,
  8: true,
  9: true,
};

const has = Object.keys(checked).every((key) =>
  Object.keys(newChecked).includes(key)
);

console.log(has); 

Для проверки как ключа, так и значения вы можете комбинировать использование Object.entries и Array.prototype.findIndex

 const checked = { 0: true, 1: true, 2: true, 3: true, 4: true };
const newChecked = {
  0: true,
  1: true,
  2: true,
  3: true,
  4: true,
  5: true,
  6: true,
  7: true,
  8: true,
  9: true,
};

const has = Object.entries(checked).every(
  ([keyToFind, valueToFind]) =>
    Object.entries(newChecked).findIndex(
      ([key, value]) => key === keyToFind amp;amp; value === valueToFind
    ) !== -1
);

console.log(has);