Как проверить, представлены ли различные диапазоны чисел в одномерном массиве объектов?

#javascript #arrays

Вопрос:

Я пытаюсь проверить, представлены ли в массиве все возрастные группы от подросткового до столетнего возраста.

Мой логический путь был:

  • Создайте массив с заранее определенными десятилетними возрастными скобками [1, 2, 3, ... , 10]
  • Изолируйте значение возраста каждого элемента в образцовом массиве объектов
  • Разделите этот возраст на 10 десять лет, чтобы определить, в каком десятилетии наступает этот возраст
  • parseInt это число, чтобы получить целое число и поместить результирующие цифры в новый массив
  • Сравните этот массив с заранее определенным массивом возрастных групп, созданным изначально.

Ожидаемый результат true , но вместо этого я получаю false .

Еще одна логическая проблема, с которой я сталкиваюсь , заключается в том, что самый старый возраст в массиве образцов 128 , уменьшается до 12 после деления/разбора, в то время как для него было бы предпочтительнее проверить, является ли int это > 10 , а не конкретно 10 .

Код ниже:

 const devAges = list.map((list) => {
  return list.age
})
const devAgesDiv = devAges.map(i => i / 10);

for(i = 0; i < devAgesDiv.length; i  ){
  devAgesDiv[i] = parseInt(devAgesDiv[i]);
}

function allAges(list) {
  const ageBrackets = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  return ageBrackets.every((ageBracket) =>
    list.some((listItem) => listItem.ageBracket === ageBracket)
  );
}

console.log(allAges(list)); // output false;
 

Образец массива ниже:

 var list = [
  { firstName: 'Harry', lastName: 'K.', country: 'Brazil', continent: 'Americas', age: 19, language: 'Python' },
  { firstName: 'Kseniya', lastName: 'T.', country: 'Belarus', continent: 'Europe', age: 29, language: 'JavaScript' },
  { firstName: 'Jing', lastName: 'X.', country: 'China', continent: 'Asia', age: 39, language: 'Ruby' },
  { firstName: 'Noa', lastName: 'A.', country: 'Israel', continent: 'Asia', age: 40, language: 'Ruby' },
  { firstName: 'Andrei', lastName: 'E.', country: 'Romania', continent: 'Europe', age: 59, language: 'C' },
  { firstName: 'Maria', lastName: 'S.', country: 'Peru', continent: 'Americas', age: 60, language: 'C' },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 75, language: 'Python' },
  { firstName: 'Chloe', lastName: 'K.', country: 'Guernsey', continent: 'Europe', age: 88, language: 'Ruby' },
  { firstName: 'Viktoria', lastName: 'W.', country: 'Bulgaria', continent: 'Europe', age: 98, language: 'PHP' },
  { firstName: 'Piotr', lastName: 'B.', country: 'Poland', continent: 'Europe', age: 128, language: 'JavaScript' }
];
 

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

1. чувак 128 / 10 == 12, и в зависимости от округления это может быть 13, а не 10, поэтому ваша скобка 10 не представлена 🙂

Ответ №1:

Вы можете сделать два обновления, чтобы получить желаемый результат:

  1. devAgesDiv — проверьте, если список age превышает 100, и верните 10, в противном случае разделите на 10; вы можете parseInt получить результат этого теста
  2. Вы можете использовать includes in allAges для проверки every ageBracket представленности

Смотреть ниже:

 const list = [
  { firstName: 'Harry', lastName: 'K.', country: 'Brazil', continent: 'Americas', age: 19, language: 'Python' },
  { firstName: 'Kseniya', lastName: 'T.', country: 'Belarus', continent: 'Europe', age: 29, language: 'JavaScript' },
  { firstName: 'Jing', lastName: 'X.', country: 'China', continent: 'Asia', age: 39, language: 'Ruby' },
  { firstName: 'Noa', lastName: 'A.', country: 'Israel', continent: 'Asia', age: 40, language: 'Ruby' },
  { firstName: 'Andrei', lastName: 'E.', country: 'Romania', continent: 'Europe', age: 59, language: 'C' },
  { firstName: 'Maria', lastName: 'S.', country: 'Peru', continent: 'Americas', age: 60, language: 'C' },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 75, language: 'Python' },
  { firstName: 'Chloe', lastName: 'K.', country: 'Guernsey', continent: 'Europe', age: 88, language: 'Ruby' },
  { firstName: 'Viktoria', lastName: 'W.', country: 'Bulgaria', continent: 'Europe', age: 98, language: 'PHP' },
  { firstName: 'Piotr', lastName: 'B.', country: 'Poland', continent: 'Europe', age: 128, language: 'JavaScript' }
];

const devAgesDiv = list.map(item => parseInt(item.age > 100 ? 10 : item.age / 10));

const ageBrackets = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function allAges(list) {
  return ageBrackets.every(ageBracket => list.includes(ageBracket));
}

console.log(allAges(devAgesDiv)); // true 

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

1. Спасибо, это отлично работает, хотя одна проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь обернуть все это как функцию, я получаю ошибку ссылки, потому devAgesDiv что она не определена. Это проблема с тем, что она классифицируется как локальная переменная, как только она находится внутри функции?