diff --git a/addons/web/static/src/core/utils/objects.js b/addons/web/static/src/core/utils/objects.js index 82850ff44ee..e58acf12590 100644 --- a/addons/web/static/src/core/utils/objects.js +++ b/addons/web/static/src/core/utils/objects.js @@ -29,5 +29,7 @@ export function deepCopy(obj) { * @returns {Partial} */ export function pick(object, ...properties) { - return Object.fromEntries(Object.entries(object).filter(([k]) => properties.includes(k))); + return Object.fromEntries( + properties.filter((prop) => prop in object).map((prop) => [prop, object[prop]]) + ); } diff --git a/addons/web/static/tests/core/utils/objects_tests.js b/addons/web/static/tests/core/utils/objects_tests.js index 70891dab0d9..5ead0b40bb6 100644 --- a/addons/web/static/tests/core/utils/objects_tests.js +++ b/addons/web/static/tests/core/utils/objects_tests.js @@ -11,6 +11,16 @@ QUnit.module("utils", () => { assert.deepEqual(pick({ a: 3, b: "a", c: [] }, "a"), { a: 3 }); assert.deepEqual(pick({ a: 3, b: "a", c: [] }, "a", "c"), { a: 3, c: [] }); assert.deepEqual(pick({ a: 3, b: "a", c: [] }, "a", "b", "c"), { a: 3, b: "a", c: [] }); + + // Non enumerable property + class MyClass { + get a() { + return 1; + } + } + const myClass = new MyClass(); + Object.defineProperty(myClass, "b", { enumerable: false, value: 2 }); + assert.deepEqual(pick(myClass, "a", "b"), { a: 1, b: 2 }); }); QUnit.test("shallowEqual: simple valid cases", function (assert) {