下面的腳本輸出
================================================
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'} ],
]
;
uj5u.com熱心網友回復:
由于arr在您的控制之下,也許您可??以指定密鑰本身的路徑。
const arr = [
['Log entry ID', '_id'],
['UUID', '_source.uuid'],
['Timestamp', '_source.@timestamp'],
['Description', '_source._desc']
];
const docs = [{
'_id': 1,
'_source': {
'uuid': 2,
'@timestamp': 3,
'_desc': 'test 1'
}
},
{
'_id': 4,
'_source': {
'uuid': 5,
'@timestamp': 6,
'_desc': 'test 2'
}
},
];
const getValue = (object, keys) => keys.split('.').reduce((o, k) => (o || {})[k], object);
console.log(docs.map((element) => arr.map((label) => {
return `${label[0]}: ${getValue(element, label[1])}`
}).join('\n')).join('\n--------------------\n'))
uj5u.com熱心網友回復:
假設docs陣列元素的鍵都是唯一的,可以遍歷物件尋找匹配的鍵。
function findVal(object, key) {
var value;
Object.keys(object).some(function(k) {
if (k === key) {
value = object[k];
return true;
}
if (object[k] && typeof object[k] === 'object') {
value = findVal(object[k], key);
return value !== undefined;
}
});
return value;
}
docs.map((element) =>
arr.map(([item, key]) =>
`${item}: ${findVal(element, key)}`)
)
將FindVal取自這里。
uj5u.com熱心網友回復:
您可以創建一個函式來從中獲取資料arr并放入描述
/* Simple Hello World in Node.js */
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 findInArr=function(value){
var t = ""
arr.forEach(item=>{
if (item.includes(value)) {t = item[0]}
})
return t
}
const description = dedent`
================================================
${
docs.map((element) => [
`${findInArr('_id')}: ${element['_id']}`,
`${findInArr('UUID')}: ${element['_source'].uuid}`,
`${findInArr('Timestamp')}: ${element['_source']['@timestamp']}\n`,
].join('\n')).join('--------------------\n')
}`;
console.log(description);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346271.html
