比方说,我有一个对象,我想在其中保留仅内部密钥/符号对。鉴于...
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
}
我知道可能有很多不同的方法可以做到这一点;只是在寻找最好/最高效的产品。
答案 0 :(得分:1)
您可以获取条目并为条目构建一个新对象。
let obj = {
[Symbol.for('foo')]: 'internal-only member',
a: 1,
b: 2,
c: 3
}
console.log(Object.fromEntries(Object.entries(obj)));
答案 1 :(得分:1)
您可以使用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);
由于您询问了效率,the reduce
method is faster。
答案 2 :(得分:0)
在对象上使用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);