我是Java脚本的新手,所以我很抱歉,如果这很琐碎。如果我有一个对象,我的问题是句法上的:
this.state = { A : { B: { C : [ {value : 'bob'}, {value : 'Jim'}, {value : 'luke'}, ] } } }
我有一个字符串location = 'A.B.C[1]',描述了我想要的数据的位置。
location = 'A.B.C[1]'
为什么我不能只做 data = this.state[location].value呢?
data = this.state[location].value
是否有使用位置字符串获取数据的简单“ JavaScript”方法?
任何帮助都将是惊人的:)
您可以分割路径并缩小对象。
function getValue(o, path) { return path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce(function (o, k) { return (o || {})[k]; }, o); } var o = { A : { B: { C: [{ value: 'Brenda' }, { value: 'Jim' }, { value: 'Lucy' }] } }}; console.log(getValue(o, 'A.B.C[1]').value); // Jim console.log(getValue(o, 'A.B.C[0].value')); // Brenda console.log(getValue(o, 'Z[0].Y.X[42]')); // undefined
对于设置值,您可以拆分路径并通过遍历给定的对象来缩小路径。如果不存在任何对象,请使用名称或数组创建一个新属性。稍后分配值。
function setValue(object, path, value) { var way = path.replace(/\[/g, '.').replace(/\]/g, '').split('.'), last = way.pop(); way.reduce(function (o, k, i, kk) { return o[k] = o[k] || (isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}); }, object)[last] = value; } var test = {}; setValue(test, "foo.name", "Mr. Foo"); setValue(test, "foo.data[0].bar", 100); setValue(test, "and.another[2].deep", 20); console.log(test);