我为节点红色制作一个脚本,我希望简化实现。我怎么能更压缩这个代码呢?
var notDetected = "NOT DETECTED";
var models = [
context.get('model1')||notDetected,
context.get('model2')||notDetected,
context.get('model3')||notDetected,
context.get('model4')||notDetected
];
switch(msg.topic)
{
case "core_1":
models[0] = msg.model + "";
context.set('model1', models[0]);
break;
case "core_2":
models[1] = msg.model + "";
context.set('model2', models[1]);
break;
case "core_3":
models[2] = msg.model + "";
context.set('model3', models[2]);
break;
case "core_4":
models[3] = msg.model + "";
context.set('model4', models[3]);
break;
}
var msgs = [
{payload: models[0]},
{payload: models[1]},
{payload: models[2]},
{payload: models[3]}
];
return msgs;
模型可以压缩得更多吗?消息怎么样?我可以删除模型中的id以匹配msgs id,例如
msg[x] = {payload: models[x]};
有可能吗?
答案 0 :(得分:1)
在可读性/可扩展性(不一定是空格)方面压缩代码:
models
和msgs
数组,core_X
字符串以获取索引,但如果您不验证输入,这可能会导致安全问题;或者您可以使用四个字符串core_1
中的地图到实际数字。在这里查看for循环:https://www.w3schools.com/js/js_loop_for.asp
看起来像这样:
var msgs = [];
for (x = 0; x < 4; x++) {
msgs[x] = {payload: models[x]};
}
答案 1 :(得分:1)
您可以将context.get()包装在单个函数中,并在 models 数组中重复使用它,这样您就不必更改数组中的每个索引改变了。
示例:
var notDetected = "NOT DETECTED";
var getContext = function(str) {
return context.get(str) || "NOT DETECTED";
}
var models = [
getContext('model1'),
getContext('model2'),
getContext('model3'),
getContext('model4'),
];
如果您需要对context.get()进行更改,您可以在函数中更改一次,如下所示:differentContext.get(str) || "NOT DETECTED"
如果没有它,你必须改变每个索引:
var models = [
differentContext.get('model1')||notDetected,
differentContext.get('model2')||notDetected,
differentContext.get('model3')||notDetected,
differentContext.get('model4')||notDetected
];
答案 2 :(得分:0)
因此,在思考了一点之后我制作了一个脚本,它只是将4条消息重定向到他们需要去的地方,然后在另一个脚本中使用所需的参数,或者从整个msg中获取msg.model。这是拆分代码:
var notDetected = {};
var msgs = [
context.get('msg1')||notDetected,
context.get('msg2')||notDetected,
context.get('msg3')||notDetected,
context.get('msg4')||notDetected
];
switch(msg.topic)
{
case "core_1":
context.set('msg1', msg);
break;
case "core_2":
context.set('msg2', msg);
break;
case "core_3":
context.set('msg3', msg);
break;
case "core_4":
context.set('msg4', msg);
break;
}
return msgs;
在文本节点中我只是设置使用msg.model值。现在我得到了更有用的分离器。