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

JS: property-value of an object contains in turn multiple values in a string. How to Access them?

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

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 文件的结果。所以对我来说实际上不可能在他们自己的条目中写入该字符串的所有值。

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

谢谢!

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

_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 }) ))    
);

然后你的代码就可以工作了。上面的代码将字符串分成几部分,并根据找到的 key/value 对创建对象,并将其分配回 _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);