Доступ к вложенным ключам в объекте и сравнение их с другими ключами объекта, но 2-й - это массив объектов - PullRequest
2 голосов
/ 30 января 2020

Итак, я получил эту проблему, пытаясь сравнить и получить доступ к данным во вложенных объектах и ​​сравнить их с массивом с объектами (это не вложенный объект).

Для имитации это выглядит примерно так:

const members = [
      {
        name: 'Angelica',
        age: '25',
        sex: 'female',
        phone: '123456789',
      },
      {
        name: 'Dominic',
        age: '30',
        sex: 'male',
        phone: '987654321',
      },
    ];

    const updates = {
      123456789: {
        date: '12.02-2019',
        warnings: {},
        errors: {}
      },
      987654321: {
        date: '20.01-2020',
        warnings: {
          somethinghere: {
            warning1: 'warning',
            allok: 'yes',
          }
        },
        errors: {},
      }
    }

Итак, сначала мне нужно проверить, равен ли телефон в элементах ключу в объекте, затем мне нужно выяснить, есть ли какие-либо предупреждения (предупреждения не пустые). Я пытался l oop через участников с forEach как members.forEach((member) => { if (Object.keys(updates) === member.name) } Но, похоже, это не работает. Информация вроде предупреждения в обновлениях изначально не объявляется, но будет появляться в состоянии после определенных изменений.

Ответы [ 4 ]

2 голосов
/ 30 января 2020

Вы можете использовать map и Object.keys методы.

const members = [ { name: 'Angelica', age: '25', sex: 'female', phone: '123456789', }, { name: 'Dominic', age: '30', sex: 'male', phone: '987654321', }, ];
const updates = { 123456789: { date: '12.02-2019', warnings: {}, errors: {} }, 987654321: { date: '20.01-2020', warnings: { somethinghere: { warning1: 'warning', allok: 'yes', } }, errors: {}, } }


var result = members.map(({phone}) => ({phone, hasWarnings: Object.keys(updates[phone].warnings).length > 0}) );
console.log(result);
1 голос
/ 30 января 2020

const members = [
    {
      name: 'Angelica',
      age: '25',
      sex: 'female',
      phone: '123456789',
    },
    {
      name: 'Dominic',
      age: '30',
      sex: 'male',
      phone: '987654321',
    },
  ];

  const updates = {
    123456789: {
      date: '12.02-2019',
      warnings: {},
      errors: {}
    },
    987654321: {
      date: '20.01-2020',
      warnings: {
        somethinghere: {
          warning1: 'warning',
          allok: 'yes',
        }
      },
      errors: {},
    }
  }

  members.forEach(member => {
      Object.entries(updates).forEach(([key, value]) => {
          if(key === member.phone && JSON.stringify(value.warnings) === '{}'){
                console.log(key)
          }
      })
  })

(JSON.stringify(obj) === '{}' Проверяет, является ли объект пустым)

1 голос
/ 30 января 2020

Object.keys(updates) - это массив, поэтому вы должны использовать includes:

if (Object.keys(updates).includes(member.phone) )
0 голосов
/ 30 января 2020

Вы можете просто набрать const update = updates[member.phone];, чтобы узнать, доступно ли обновление, и оно будет неопределенным, если в наборе ключей обновлений такого телефона не будет.

Тогда const warnings = Object.keys(update.warnings); выдаст вам список предупреждений.

const members = [{
  name: 'Angelica',
  age: '25',
  sex: 'female',
  phone: '123456789',
}, {
  name: 'Dominic',
  age: '30',
  sex: 'male',
  phone: '987654321',
}, ];
const updates = {
  123456789: {
    date: '12.02-2019',
    warnings: {},
    errors: {}
  },
  987654321: {
    date: '20.01-2020',
    warnings: {
      somethinghere: {
        warning1: 'warning',
        allok: 'yes',
      }
    },
    errors: {},
  }
}

members.forEach((member) => {
  const update = updates[member.phone];
  if (update) {
    const warnings = Object.keys(update.warnings);
    console.log(warnings);
    if (warnings.length === 0) {
      console.log(`no warnings for member ${member.name}'s update`);
    }
  } else {
    console.log(`no updates for member ${member.name}`);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...