4 ms·
Oh I thought of an other one. In Clojure "objects" are actually maps, which can have non-string keys as well. That means you can destructure maps which have non
by joshlemer 4y ago
Oh I thought of an other one. In Clojure "objects" are actually maps, which can have non-string keys as well. That means you can destructure maps which have non-string (or, technically, keyword) keys as well:
(defn foo [{a 1
b 2 :as bar}]
[bar a b])
(foo {1 "hi" 2 "world" 3 "!"}) ;; => [{1 "hi", 2 "world", 3 "!"} "hi" "world"]
In JS of course you can have Maps with non-string keys, but destructuring doesn't work on them. Plus you have other issues like arrays in JS having equality defined by reference rather than value, making maps less useful overall.
- __ryan__ 4y agoAh, I see. Yeah, you would have to bind the argument to a name then destructure it separately: let foo = (bar) => { let {a, b, c} = bar return [bar, a, b, c] } foo({ a: 1, b: 2, c: 3 }) // => [ { a: 1, b: 2, c: 3 }, 1, 2, 3 ] Though JavaScript object keys are strictly strings and symbols, you can destructure dynamic keys like so: let foo = (bar) => { let {[1]: a, [2]: b} = bar return [bar, a, b] } foo({ 1: "hi", 2: "world", 3: "!" }) // => [ { '1': 'hi', , '2': 'world', '3': '!' }, 'hi' 'world' ]