tag*_*eit 5 javascript object ecmascript-6
假设我有一个对象,我想在其中保留仅限内部的密钥/符号对。鉴于...
let obj = {
[Symbol.for('foo')]: 'internal-only member',
a: 1,
b: 2,
c: 3
}
Run Code Online (Sandbox Code Playgroud)
当我通过 API 将这些返回给客户端时,我想从对象中删除所有符号,因为客户端对它们没有任何用途。
我想要一个将返回的通用函数:
{
a: 1,
b: 2,
c: 3
}
Run Code Online (Sandbox Code Playgroud)
换句话说:
returnScrubbedObj = (obj) => {
// filter/map/remove/copy etc the original object to a new object without symbols
return objWithoutSymbols
}
Run Code Online (Sandbox Code Playgroud)
我知道可能有很多不同的方法可以做到这一点;只是寻找最好/最有效的一个。
您可以使用 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);Run Code Online (Sandbox Code Playgroud)
reduce使用and的更详细版本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);Run Code Online (Sandbox Code Playgroud)
而且既然你问的是效率,那这个reduce方法就更快了。