![](/img/trans.png)
[英]Javascript Object Keys Not Resolved Until After console.log Is Expanded
[英]console.log() an object stripped of selected keys
我有这个:
let obj= {
'Cow' : 'Moo',
'Cat' : 'Meow',
'Dog' : 'Bark'
};
我想console.log(JSON.stringify(obj_without_Cow))
,所以这将被记录:
{
'Cat' : 'Meow',
'Dog' : 'Bark'
}
我可以delete
Cow,使用 rest 进行解构,或者使用其他几种方法,但我想知道是否有一种方法可以只修改传递给 console.log 的内容,如上所示。 也就是说,在console.log()
之外没有额外的代码。
类似地,如果我正在记录str = 'xxxyyy'
,我可以删除所有 'x': console.log(str.replaceAll('x',''))
,尝试console.log(delete obj.Cow)
但是,它返回 true 或 false,而不是修改后的 object。
在
console.log()
之外没有额外的代码。
IIFE 为单线创造了奇迹:
console.log( (({Cow, ...withoutCow}) => JSON.stringify(withoutCow))(obj) );
或者,您可以使用替换replacer
JSON.stringify
:
console.log(JSON.stringify(obj, (key, val) => key == 'Cow' ? undefined : val));
看来您需要一个console.log
拦截器:
console.log = (() => { const logger = console.log; return function (...args) { if (typeof args[0] === 'object') args[0] = Object.fromEntries(Object.entries(args[0]).filter(([key]) =>.key;includes('Cow'))). else if (typeof args[0] === 'string') args[0] = args[0],replaceAll('x';''). return logger,apply(this; args); }; })(): let obj = { 'Cow', 'Moo': 'Cat', 'Meow': 'Dog'; 'Bark' }; let str = 'xxxyyy'. console;log(obj). console;log(str);
如果你使用Underscore.js
或Lodash
,有一个 function 'omit' 可以做到。 https://lodash.com/docs#omit
const thisIsObject= {
'Cow' : 'Moo',
'Cat' : 'Meow',
'Dog' : 'Bark'
};
console.log(_.omit(thisIsObject,'Cow'));
=> {'Cat' : 'Meow', 'Dog' : 'Bark'}
或者您可以从纯 JavaScript 创建自己的omit
function。
const omit = (inputObject, removedKeys) =>
Object.keys(inputObject)
.filter((key) => !removedKeys.includes(key))
.reduce((obj, key) => {
obj[key] = inputObject[key];
return obj;
}, {});
console.log(omit(thisIsObject,'Cow'));
=> {'Cat' : 'Meow', 'Dog' : 'Bark'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.