javascript - Find object by properties from array -
with array, value, , and object nested objects:
object
mesh
array
['options', 'range', 'x']
value
12.5
is possible translate update property, e.g.
mesh.options.range.x = 12.5
attempted:
index = (obj, i) -> obj[i] arr.reduce(index, obj) = 12.5
update
thank elegant solutions.
using .reduce()
pretty nice this:
// current object----| |----current key // v v arr.reduce(function(obj, key) { return obj == null ? obj : obj[key]; }, window.mesh); // ^ // |-- initial object
your attempt use .reduce()
needed pass function manages "accumulation".
here, long previous obj
wasn't null
or undefined
, it'll return key
of current obj
, becomes next obj
.
then since need assign value, you'd want value of second last key.
var o = arr.slice(0,-1).reduce(function(obj, key) { return obj == null ? obj : obj[key]; }, window.mesh);
and check existence , use last item in arr
assignment.
o && o[arr.pop()] = 12.5;
all of can abstracted away function 1 or other based on how many arguments passed.
function setfromarray(obj, arr, val) { var keys = arguments.length < 3 ? arr.slice() : arr.slice(0, -1); var o = keys.slice(0,-1).reduce(function(obj, key) { return obj == null ? obj : obj[key]; }, window.mesh); if (arguments.length < 3) return o; else o && o[keys.pop()]; }
Comments
Post a Comment