繁体   English   中英

使用 JavaScript 中的“地址字符串”从 json 对象中获取字段

[英]getting a field from a json object using a "address string" in JavaScript

我是 java 脚本的新手,所以如果这是微不足道的,我很抱歉。 我的问题是语法问题,如果我有一个对象:

this.state = {
  A : {
       B: {
           C : [
             {value : 'bob'},
             {value : 'Jim'},
             {value : 'luke'},
           ]
       }
  }
}

我有一个字符串location = 'ABC[1]' ,它描述了我想要的数据的位置。

为什么我不能只做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, 'ABC[1]').value); // Jim console.log(getValue(o, 'ABC[0].value')); // Brenda console.log(getValue(o, 'Z[0].YX[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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM