当前位置: 首页 > 面试题库 >

以点表示法转换字符串以获取对象引用

姚培
2023-03-14
问题内容

考虑一下javascript中的此对象,

var obj = { a : { b: 1, c: 2 } };

给定字符串“ obj.ab”,如何获取该对象所指向的对象,以便可以更改其值?即我希望能够做类似的事情

obj.a.b = 5;
obj.a.c = 10;

其中“ obj.ab”和“obj.ac”是字符串(不是obj引用)。我碰到了,在这里我可以得到点符号字符串指向obj的值,但我需要的是一种可以获取对象本身的方法?

对象的嵌套可能比这更深。即也许

var obj = { a: { b: 1, c : { d : 3, e : 4}, f: 5 } }

问题答案:

要获得该值,请考虑:

function ref(obj, str) {
    str = str.split(".");
    for (var i = 0; i < str.length; i++)
        obj = obj[str[i]];
    return obj;
}

var obj = { a: { b: 1, c : { d : 3, e : 4}, f: 5 } }
str = 'a.c.d'
ref(obj, str) // 3

或更花哨的方式,使用reduce:

function ref(obj, str) {
    return str.split(".").reduce(function(o, x) { return o[x] }, obj);
}

在javascript中无法返回对对象成员的可分配引用,您必须使用如下函数:

function set(obj, str, val) {
    str = str.split(".");
    while (str.length > 1)
        obj = obj[str.shift()];
    return obj[str.shift()] = val;
}

var obj = { a: { b: 1, c : { d : 3, e : 4}, f: 5 } }
str = 'a.c.d'
set(obj, str, 99)
console.log(obj.a.c.d) // 99

或使用ref上面给定的方法获取对包含对象的引用,然后将[]运算符应用于该对象:

parts = str.split(/\.(?=[^.]+$)/)  // Split "foo.bar.baz" into ["foo.bar", "baz"]
ref(obj, parts[0])[parts[1]] = 99


 类似资料:
  • 问题内容: 给定一个JS对象 和一个字符串 如何将字符串转换为点表示法,以便我可以 如果字符串是正义的,我可以使用。但这更复杂。我想有一种简单的方法,但是目前可以逃脱。 问题答案: 最近的说明: 虽然我很高兴这个答案获得了很多好评,但我还是有些恐惧。如果需要将点符号字符串(例如“ xabc”)转换为引用,则可能(可能)是表明发生了非常错误的信号(除非您正在执行一些奇怪的反序列化)。 也就是说,寻找

  • 问题内容: 我想将以下JSON字符串转换为Java对象: 我的目标是轻松访问它,例如: 我听说过Jackson,但是由于涉及“ mymusic”列表,我不知道如何使用它来适应我拥有的json字符串,因为它不仅仅是键值对。如果杰克逊不是最好的选择,我该如何用杰克逊完成? 问题答案: 为此,无需与GSON一起使用;杰克逊可以做普通的地图/列表: 或更方便的JSON树: 顺便说一句,没有理由为什么您不能

  • 问题内容: 我知道这个问题可能被问过10000次,但是,我似乎找不到这个问题的直接答案。 我的数据库中存储了一个LOB,代表一个图像;我正在从数据库中获取该图像,我想通过HTML IMG标签将其显示在网页上。这不是我的首选解决方案,但在我找到更好的解决方案之前,这是一个权宜之计。 我正在尝试通过以下方式使用Apache Commons Codec将byte []转换为Base64: 然后,我试图像

  • 问题内容: xml看起来像这样: 我正在使用stax一次处理一个“ ”,并且可以正常工作。我需要以字符串的形式获取整个语句节点,以便创建“ 123.xml”和“ 456.xml”,甚至可以将其加载到按帐户索引的数据库表中。 使用这种方法:http : //www.devx.com/Java/Article/30298/1954 我正在寻找做这样的事情: 问题答案: 为什么不只使用xpath? 您可

  • 获取对象的类名为,使用: 返回如下内容: 我正在寻找纯版本:。我如何得到一个清理过的类名字符串呢? 我发现了一些关于这个的问题,但没有真正的答案。难道一点都不可能吗?

  • 问题内容: 我想将json字符串转换为对象列表。请帮我。如果由来完成,那会更有帮助。 我试过了,但是没有用。我不想要该json的所有值。MatrixModel中提到的 这是一个对象 这是Json String 问题答案: 您可以使用json2csharp.com将json转换为对象模型 将您的JSON粘贴到Box中。 单击“生成”。 您将为您的对象模型获得C#代码 通过使用 NewtonJson*