var key, x, y, z; // impure key = 1; var { [key++]: y, ...x } = { 1: 1, a: 1 }; expect(x).toEqual({ a: 1 }); expect(key).toBe(2); expect(1).toBe(y); // takes care of the order key = 1; var { [++key]: y, [++key]: z, ...rest} = {2: 2, 3: 3}; expect(y).toBe(2); expect(z).toBe(3); // pure, computed property should remain as-is key = 2; ({ [key]: y, z, ...x } = {2: "two", z: "zee"}); expect(y).toBe("two"); expect(x).toEqual({}); expect(z).toBe("zee");