Как заменить значения свойств объекта его типом в javascript? - PullRequest
0 голосов
/ 12 апреля 2020

Давайте рассмотрим переменную obj , которая определяется как:

var obj = {
  one: "I am a String",
  two: {},
  three: 3,
  four: []
}

Теперь давайте представим функцию с именем replaceWithType () , которую можно использовать примерно так:

var type = replaceWithType(obj)
console.log(JSON.stringify(type))

Это выводит:

{"one":"string","two":"object","three":"number","four":"array"}

Итак, вы можете видеть, что replaceWithType () заменяет значение их типами , но я не понимаю, как построить эту функцию. Итак, можете ли вы дать мне краткую демонстрацию того, как это можно сделать?

Ответы [ 4 ]

0 голосов
/ 12 апреля 2020

Вот полный пример с последними стандартом ECMAScript, определенными девятью типами : undefined, Boolean, Number, String, BigInt, Symbol, null, Object, Function (массив не является одним из них, но я все же включил его):

var obj = {
    one: "I am a String",
    two: {},
    three: 3,
    four: [],
    five: () => {},
    six: null,
    seven: undefined,
    eight: true,
    nine: 1n,
    ten: Symbol(1),
  },
  result = Object.fromEntries(
    Object.entries(obj).map(([k, v]) => {
      let type;
      switch (true) {
        case Array.isArray(v):
          type = "array";
          break;
        case v === null:
          type = "null";
          break;
        default:
          type = typeof v;
      }
      return [k, type];
    })
  );

console.log(result);
0 голосов
/ 12 апреля 2020

Вы можете сопоставить все записи с их типами и получить от них новый объект.

var obj = { one: "I am a String", two: {}, three: 3, four: [] },
    result = Object.fromEntries(Object
        .entries(obj)
        .map(([k, v]) => [k, Array.isArray(v) ? 'array' : typeof v])
    );

console.log(result);
0 голосов
/ 12 апреля 2020
var obj = {
    one: "I am a String",
    two: {},
    three: 3,
    four: []
}

Object.keys(obj).map((key) => {
    obj[key] = typeof obj[key]
})

console.log(obj)

То, что мы здесь делаем, это:

  • Сначала используем функцию Object.keys(), чтобы создать массив ключей из объекта, чтобы мы могли их перебирать.

  • Затем используйте функцию array.prototype.map() для go через каждого. Вы можете рассматривать .map() как более удобный для l oop.

  • И, наконец, мы меняем каждый элемент объекта по его типу, используя оператор typeof, который возвращает тип значения. И этот синтаксис obj[value] совпадает с высказыванием obj.value

0 голосов
/ 12 апреля 2020

Используя Object.entries() и .reduce():

const obj = {
  one: "I am a String",
  two: {},
  three: 3,
  four: []
}

const result = Object.entries(obj).reduce((a, [k, v]) => {
    a[k] = Array.isArray(v) ? 'array' : typeof v;
    return a;
}, {});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...