JS:一个对象的属性值在一个字符串中依次包含多个值。如何访问它们?

Posted

技术标签:

【中文标题】JS:一个对象的属性值在一个字符串中依次包含多个值。如何访问它们?【英文标题】:JS: property-value of an object contains in turn multiple values in a string. How to Access them? 【发布时间】:2018-03-03 06:30:44 【问题描述】:

我在 JS 中访问对象的属性值时遇到问题。属性值称为“_value”并包含一个字符串。该字符串再次被划分为其他一些值。看看这篇文章中的图片,了解我在说什么;)

JS Property-Value contains in turn multiple values in a string.

我的问题是如何访问这些特定值。 例如以这样的方式:

x = sampleObject[0]._value.person
print(x) = 1
 y = sampleObject[0]._value.V_number
print(y) = sg
z = sampleObject[0]._value.tense
print(z) = past
...

...作为结果获取图像中第一个条目的值。

我想我可以先尝试访问“_value”。而不是对返回的字符串进行多次操作。但这在我看来非常复杂,特别是因为返回的字符串“_values”在它们包含的子属性中有所不同。

完美的解决方案是在 和 中拥有一个具有所有值的对象,它们自己喜欢

Object[x] = _begin: "4"
             _end: "9"
             _sofa: "6"
             _case: "nom"
             _number: "sg"
             _gender: "masc"
             ...
             _xmi:id: "2625"
             ...

不幸的是,我不是自己生成对象。该对象是读取 xml 文件的结果。所以对我来说,实际上不可能在自己的条目中写入该字符串的所有值。

我很高兴听到您的一些可能的解决方案或想法。

谢谢!

【问题讨论】:

添加javascript标签就好了。 完成 ;) 添加标签 【参考方案1】:

字符串是......只是一个字符串,因此您不能像访问结构化对象一样访问它的一部分。

_value 属性似乎遵循"key=value|key=value|key=value" 的语法,所以我建议先使用以下代码解析您的对象数组:

sampleObject.forEach( o => 
    o._value = Object.assign(...o._value.split('|')
                .map( pair => pair.split('=') )
                .map( ([k, v]) => ( [k]: v ) ))    
);

然后你的代码就可以工作了。上面的代码会将字符串拆分为多个片段,并根据它找到的键/值对创建对象,并将其分配回_value 属性。

var sampleObject = [
     _value: "V_number=sg|person=1|tense=past|mood=ind" 
];

sampleObject.forEach( o => 
    o._value = Object.assign(...o._value.split('|')
                .map( pair => pair.split('=') )
                .map( ([k, v]) => ( [k]: v ) ))    
);

console.log(sampleObject[0]._value.person);
console.log(sampleObject[0]._value.V_number);
console.log(sampleObject[0]._value.tense);

【讨论】:

以上是关于JS:一个对象的属性值在一个字符串中依次包含多个值。如何访问它们?的主要内容,如果未能解决你的问题,请参考以下文章

js 变量和作用域

仅获取共享特定属性值的 Core Data 对象

js字符串和数组操作方法

js操作对象属性值为字符串

数组对象修改某一个属性值的数据类型

JS面向对象