我有一个任务要实现记录器函数,它将为logging.It准备数据,应该有默认的服务配置{serviceName: 'global', serviceId: 1}。
下面是一些例子:
// {"3-0":"[auth_service] Wrong email","3-1":"[auth_service] Wrong password","3-2":"[auth_service] Success login"}
logger(['Wrong email', 'Wrong password', 'Success login'], {serviceName: 'auth_service', serviceId: 3});
// {"1-0":"[global] Fatal error","1-1":"[global] Data corrupted"}
logger(['Fatal error', 'Data corrupted']);应该用打字本来写。我开始制作这个函数,但我不知道如何使它看起来像示例或测试样例。这就是我到现在为止所做的:
function logger(data: [], serviceInfo: {}) {
//It should have default service configuration `{serviceName: 'global', serviceId: 1}`
if (serviceInfo == undefined) {
serviceInfo = {
serviceName: "global",
serviceId: 1,
};
} else {
let obj = {
}
return obj;
}
}和单元测试:
describe('logger', () => {
it('should log user events', () => {
const result = logger(['User Event 1', 'User Event 2'], {serviceName: 'user', serviceId: 12});
const expected = {
'12-0': '[user] User Event 1',
'12-1': '[user] User Event 2',
};
assert.deepStrictEqual(result, expected)
});
it('should log auth events', () => {
const result = logger(['Event 1', 'Event 2', 'Event 3'], {serviceName: 'auth', serviceId: 2});
assert.strictEqual(result['2-1'], '[auth] Event 2')
});
it('should log global events', () => {
const result = logger(['Event 1', 'Event 2', 'Event 3']);
assert.strictEqual(result['1-2'], '[global] Event 3')
});
});我考虑将数组推入另一个对象,但我不知道如何根据serviceId显示如下:
{
'12-0':'[user] User event 1'
}其中12为服务id,0为数组项索引,用户为serviceName,而用户事件1为数组项。我是Javascript和类型记录中的新手,我对所有的细微差别都很好奇。你能帮帮我吗?提前感谢!
编辑:我试了一下,想出了这个函数:
function logger(data: [], serviceInfo: {}) {
//It should have default service configuration `{serviceName: 'global', serviceId: 1}`
serviceInfo = {
serviceName : 'Gigi',
serviceId : 0
}
if (serviceInfo == undefined) {
serviceInfo = {
serviceName: "global",
serviceId: 1,
};
}
let obj={}
//obj[serviceInfo.serviceId.value + ]
data.forEach(function (value, i) {
//console.log('%d: %s', i, value);
obj[serviceInfo.serviceId.value +'-'+ i] = '[' + serviceInfo.serviceName.value + ']' + value
});
console.log(obj)
}但在控制台里我得到了:
{
'undefined-0': '[undefined]User Event 1',
'undefined-1': '[undefined]User Event 2'
}
{
'undefined-0': '[undefined]Event 1',
'undefined-1': '[undefined]Event 2',
'undefined-2': '[undefined]Event 3'
}
{
'undefined-0': '[undefined]Event 1',
'undefined-1': '[undefined]Event 2',
'undefined-2': '[undefined]Event 3'
}如果数据来自输入而不是函数,如何访问serviceName和serviceId?
发布于 2021-12-31 00:09:27
我解决了这个问题,这样:
function logger(data: [], serviceInfo: {}) {
if (serviceInfo == undefined) {
serviceInfo = {
serviceName: "global",
serviceId: 1,
};
}
let obj = {};
data.forEach(function (value, i) {
//console.log('%d: %s', i, value);
obj[serviceInfo.serviceId + "-" + i] =
"[" + serviceInfo.serviceName + "] " + value;
});
return obj
}当我编辑这个问题的时候,问题是我错误地加入了object属性来得到这个值,所以,现在这个函数通过了所有的测试单元。
https://stackoverflow.com/questions/70537632
复制相似问题