【发布时间】:2021-12-17 15:37:35
【问题描述】:
以下脚本输出
================================================
Log entry ID: 1
UUID: 2
Timestamp: 3
--------------------
Log entry ID: 4
UUID: 5
Timestamp: 6
这就是我想要的。
现在description 是硬编码的,我希望使用arr 来构建它。
我目前的想法是在map() 函数中以某种方式生成内部数组:
[
`Log entry ID: ${element['_id']}`,
`UUID: ${element['_source'].uuid}`,
`Timestamp: ${element['_source']['@timestamp']}\n`,
]
但是由于模板的原因,当单独查看它时,它甚至不是一个具有 3 个元素的有效数组。所以我完全没有想法。
问题
我想我必须以某种方式遍历arr 中的元素,然后才能将其提供给map()。
有谁知道如何做到这一点?
const dedent = require('dedent');
const arr = [
[ 'Log entry ID', '_id' ],
[ 'UUID', 'uuid' ],
[ 'Timestamp', '@timestamp' ],
]
;
const docs = [
{'_id': 1,'_source': {'uuid': 2,'@timestamp': 3}},
{'_id': 4,'_source': {'uuid': 5,'@timestamp': 6}},
];
const description = dedent`
================================================
${
docs.map((element) => [
`Log entry ID: ${element['_id']}`,
`UUID: ${element['_source'].uuid}`,
`Timestamp: ${element['_source']['@timestamp']}\n`,
].join('\n')).join('--------------------\n')
}
`;
console.log(description);
更新
我控制arr,所以将其更改为例如。是可能的,或者别的什么
const arr = [
[ 'Log entry ID', '_id' ],
[ 'UUID', {'_source': 'uuid'} ],
[ 'Timestamp', {'_source': '@timestamp'} ],
]
;
【问题讨论】:
-
您要访问的键具有不同的深度(_id:1、uuid:2 等),这有点令人困惑。你控制两个变量:
arr和docs? -
@JohanDettmar 我控制
arr,所以如果这样更容易的话,它的结构可以不同。 -
如果您知道键对于
docs的整个项目都是唯一的,无论深度如何,仅对该键名称进行搜索就足够了。否则,我们将需要一条通往感兴趣值的唯一“关键路径”。 -
@JohanDettmar 如果
_source可以以某种方式包含在arr的元素中,那么就不需要搜索了? -
@JohanDettmar 我现在更新了 OP,在那里我建议了另一种构建
arr的方法,所以希望不需要搜索?
标签: javascript node.js arrays json ecmascript-6