Какой самый эффективный способ удалить все символы с объекта? - PullRequest
2 голосов
/ 27 мая 2019

Допустим, у меня есть объект, в котором я хочу хранить только внутренние ключи / пары с символами.Учитывая ...

let obj = {
    [Symbol.for('foo')]: 'internal-only member',
    a: 1,
    b: 2,
    c: 3
}

Когда я возвращаю их клиенту через мой API, я хочу удалить все символы из объекта, потому что клиент их не использует.

Я бы хотел универсальную функцию, которая будет возвращать:

{
    a: 1,
    b: 2,
    c: 3
}

Другими словами:

returnScrubbedObj = (obj) => {
    // filter/map/remove/copy etc the original object to a new object without symbols 
    return objWithoutSymbols
}

Я знаю, что, вероятно, существует много разных способов сделать это;просто ищу лучший / самый эффективный.

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Вы можете использовать методы JSON:

let obj = {[Symbol.for('foo')]:'internal-only member',a:1,b:2,c:3};
const res = JSON.parse(JSON.stringify(obj));
console.log(res);

Более подробная версия с использованием reduce и typeof:

let obj = {[Symbol.for('foo')]:'internal-only member',a:1,b:2,c:3};
const res = Object.entries(obj).reduce((acc, [k, v]) => typeof k == "symbol" ? acc : (acc[k] = v, acc), {});
console.log(res);

И поскольку вы спросили об эффективности, метод reduce быстрее .

1 голос
/ 27 мая 2019

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

let obj = {
    [Symbol.for('foo')]: 'internal-only member',
    a: 1,
    b: 2,
    c: 3
}
console.log(Object.fromEntries(Object.entries(obj)));
0 голосов
/ 27 мая 2019

Удобно и требует меньше памяти и места для использования for .. in здесь, на объекте.

let obj = {
    [Symbol.for('foo')]: 'internal-only member',
    a: 1,
    b: 2,
    c: 3
}

let newObj = {};
for(let prop in obj) {
  if(obj.hasOwnProperty(prop)){
     newObj[prop] = obj[prop];
  }
}

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