我正在使用React,我想渲染一个对象。必须基于来自gRPC后端服务的传入JSON对象流动态构建该对象。流以特定形式出现:
具有长度属性的主标头对象,该属性引用对象中键/值对的数量。要构建的对象也可以包含嵌套对象。对于嵌套对象,流将包含另一种类型的标头对象,其长度属性将引用嵌套对象中键/值对的数量。我将其称为属性标题。
让我举例说明。 以下是要构建的对象。
{
name: 'John',
address: {
street: 'Kennedy avenue',
},
age: 25,
}
传入流如下:
{
mainHeader: {
length: 3,
},
}
{
key: 'name',
}
{
str: 'John',
}
{
key: 'address',
}
{
propertyHeader: {
length: 1,
},
}
{
key: 'street',
}
{
str: 'Kennedy avenue',
}
{
key: 'age',
}
{
num: 25,
}
我将所有这些对象按顺序推入状态变量数组(索引为0的mainHeader)。我的问题是,是否有一个很好的高效清洁的解决方案来构建对象?我希望解决方案不依赖于具有该名称的key
属性。如果可能的话,对象的顺序和length属性应该是构建对象所需的全部。
答案 0 :(得分:1)
这是一个简单的实现,没有错误处理。
function parseStream(stream) {
var firstChunk = stream.shift();
return nestedParse(firstChunk.mainHeader.length, stream);
}
function nestedParse(length, stream) {
var answer = {};
while (0 < length) {
length--;
var keyChunk = stream.shift();
var nextChunk = stream.shift();
if (nextChunk.propertyHeader) {
answer[ keyChunk.key ] = nestedParse(nextChunk.propertyHeader.length, stream);
}
else if ('str' in nextChunk) {
answer[ keyChunk.key ] = nextChunk.str;
}
else if ('num' in nextChunk) {
answer[ keyChunk.key ] = nextChunk.num;
}
}
return answer;
}
console.log(parseStream(stream))