{"ScriptPreparationCode":"function createObj(size) {\r\n return Array(size)\r\n .fill(0)\r\n .map(() =\u003E String.fromCodePoint(Math.trunc(Math.random() * 26 \u002B 97)))\r\n .reduce((acc, char, i) =\u003E ({ ...acc, [\u0060${char}${i}\u0060]: i }), {})\r\n}\r\n\r\nvar obj = createObj(1000)\r\nvar keys = Object.keys(obj).filter(() =\u003E Math.random() \u003C 0.5)","TestCases":[{"Name":"vanilla set","Code":"const result = {}\r\nconst keySet = new Set(keys)\r\n\r\nfor (const key of Object.keys(obj)) {\r\n if (!keySet.has(key)) {\r\n result[key] = obj[key]\r\n }\r\n}","IsDeferred":false},{"Name":"vanilla object in","Code":"const result = {}\r\nconst keyObj = {}\r\n\r\nfor (const key of keys) {\r\n keyObj[key] = true\r\n}\r\n\r\nfor (const key of Object.keys(obj)) {\r\n if (!(key in keyObj)) {\r\n result[key] = obj[key]\r\n }\r\n}","IsDeferred":false},{"Name":"vanilla object coerce","Code":"const result = {}\r\nconst keyObj = {}\r\n\r\nfor (const key of keys) {\r\n keyObj[key] = true\r\n}\r\n\r\nfor (const key of Object.keys(obj)) {\r\n if (keyObj[key]) {\r\n result[key] = obj[key]\r\n }\r\n}","IsDeferred":false},{"Name":"vanilla array","Code":"const result = {}\r\n\r\nfor (const key of Object.keys(obj)) {\r\n if (!keys.includes(key)) {\r\n result[key] = obj[key]\r\n }\r\n}","IsDeferred":false},{"Name":"vanilla delete spread","Code":"const result = { ...obj }\r\n\r\nfor (const key of keys) {\r\n delete result[key]\r\n}","IsDeferred":false},{"Name":"vanilla delete assign","Code":"const result = Object.assign({}, obj)\r\n\r\nfor (const key of keys) {\r\n delete result[key]\r\n}","IsDeferred":false},{"Name":"lodash omit","Code":"_.omit(obj, keys)","IsDeferred":false}]}