javascript - 这段代码可以更短、更容易实现吗?

标签 javascript arrays node-red

我正在为红色节点制作一个脚本,我希望使其易于实现。我怎样才能进一步压缩这段代码?

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 来匹配消息 id

msg[x] = {payload: models[x]};

可能吗?

最佳答案

根据可读性/可扩展性(不一定是空间)压缩代码:

  • 您可以使用循环来填充 modelsmsgs 数组,
  • 您可以在第一个“_”处拆分 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]};
}

关于javascript - 这段代码可以更短、更容易实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48614643/

相关文章:

javascript - 如何在下拉更改事件(SelectedIndexChange)上显示加载图像

javascript - 将 $scope.master 传递到下一个表单

arrays - 将多个 Google 电子表格合并为一张表格

arrays - 如何处理 nodejs 中的数组缓冲区分配失败?

node.js - 如何在扩展 (node.js) docker 图像上添加自定义 CA 证书

linux - 如何删除 Bourne shell 中除特定文件之外的所有文件?

javascript - 触发 JQuery 事件后不会触发代码隐藏 OnClick 事件

javascript - 使用 JavaScript 查找选定文本的开始和结束索引

java - 将多个数组统一为一个排序数组的最佳方法

Docker NodeRed 提交的容器不维护流和模块