Как отделить свойства с примитивом number от остальных в объекте?

Рейтинг: 1Ответов: 2Опубликовано: 16.02.2023

Есть объект, в нём свойства разных примитивов. Как создать объект содержащий только свойства примитива Number?

let salaries = {
  worker0: 5040,
  worker1: 6400,
  worker2: 3000,
  name0: "Mike",
  worker3: 2100,
  worker4: 1300,
  name1: "Jack"
  worker5: 600,
}

Ответы

▲ 1

Выбрать все ключи со значениями из объекта, где значения имеют тип number

Без мутирования исходного объекта

let salaries = {
  worker0: 5040,
  worker1: 6400,
  worker2: 3000,
  name0: "Mike",
  worker3: 2100,
  worker4: 1300,
  name1: "Jack",
  worker5: 600,
}

function doNumber(obj) {
  const res = {};
  for (let i in obj) {
    if (typeof obj[i] === 'number') res[i] = obj[i];
  }
  return res;
}

console.log(doNumber(salaries))

С мутированием исходного объекта

let salaries = {
  worker0: 5040,
  worker1: 6400,
  worker2: 3000,
  name0: "Mike",
  worker3: 2100,
  worker4: 1300,
  name1: "Jack",
  worker5: 600,
}

for (let i in salaries) {
  if (typeof salaries[i] !== 'number') delete salaries[i];
}

console.log(salaries)

▲ 0

Можно использовать Object.entries чтобы превратить поля объекта в массивы, затем отфильтровать их, используя typeof

let salaries = {
  worker0: 5040,
  worker1: 6400,
  worker2: 3000,
  name0: "Mike",
  worker3: 2100,
  worker4: 1300,
  name1: "Jack",
  worker5: 600,
}

// Поля объекта как массивы
const entries = Object.entries(salaries)

// Массив содержащий только пары ключ-число
const numbers = entries.filter(([key, value]) => typeof value === 'number')

const numbersObj = Object.fromEntries(numbers)

console.log(numbersObj)