【问题标题】:How to access object array using javascript with variable如何使用带有变量的javascript访问对象数组
【发布时间】:2018-07-23 18:16:57
【问题描述】:
var dict = {
  "configMigratedTo": {
        "message": "Migrated configuration to configurator: $1"
    }
}
var parametersForTranslation = {};
function __tr(src, params) {
  parametersForTranslation[src] = params;
  return buildMessage(src);
}

function buildMessage(src){
    var message=dict[src] ? dict[src].message : src
    console.log(message);
    var messageArray = message.split("$");
    var output = "";
    messageArray.forEach(function(elem, index){
        if(index === 0){
            output += elem;
        }else{
            // get variable and index
            var paramIndex = configMigratedTo.substring(0, 1);
            var paramValue = parametersForTranslation[src][paramIndex-1];
            output += paramValue;
            output += configMigratedTo.substring(1);
        }
    });
    return output;
}
__tr("configMigratedTo", [2]);
console.log(buildMessage("configMigratedTo"));

我想得到像 __tr("configMigratedTo", [2]); 这样的结果 那么它会给我

将配置迁移到配置器:2

我不知道我的代码哪里出错了

【问题讨论】:

  • __tr() 是什么?
  • @LouysPatriceBessette 这是一个函数,在上面定义,在代码中。
  • 基本上就是根据key找到翻译...__tr就是翻译
  • 哈。行。但是你弄乱了源头。您想访问dict 对象中的configMigratedTo。它应该类似于:dict.configMigratedTo.message 以获取值 Migrated configuration to configurator: $1... 现在我真的不知道 $1 是否会被视为变量...这取决于buildMessage() 函数而且我可以不要这样说。
  • 嗯,在你可以玩弄编程逻辑之前,你需要一个坚实的编程基础(在这种情况下是 JavaScript)的基本概念。从尝试访问尚未定义的变量看来,您应该关注后者。您了解缺少的变量 configMigratedTo var 和 dict 对象上的现有属性之间的区别吗?

标签: javascript jquery internationalization


【解决方案1】:

试试这个。希望对您有所帮助!

var dict = {
  "configMigratedTo": {
        "message": "Migrated configuration to configurator: $1"
    }
}

function __tr(src, params) 
{
    for (var key in dict)
  {
    if (key === src)
    {
        var message = dict[key].message;
        return message.substring(0, message.length - 2) + params[0];
    }
  }
  return;
}


console.log(__tr("configMigratedTo", [2]))

https://jsfiddle.net/eLd9u2pq/

【讨论】:

    【解决方案2】:

    够了吗?

    var dict = {
      "configMigratedTo": {
            "message": "Migrated configuration to configurator: "
        }
    }
    
    function buildMessage(src,param){
        var output = dict[src].message + param;
        return output;
    }
    
    console.log(buildMessage("configMigratedTo",2));

    【讨论】:

      【解决方案3】:

      您过于复杂了,使用正则表达式并将函数作为替换器传递会容易得多

      var dict = {
        "configMigratedTo": {
          "message": "Migrated configuration to configurator: $1"
        }
      }
      function __tr(src, params) {
        if (! dict[src]) return src;
        if (! /\$0/.test(dict[src].message)) params.unshift('');
        return dict[src].message.replace(/\$(\d)+/g, (orig, match) => params[match] || orig);
      }
      
      console.log(__tr("configMigratedTo", [2]));

      【讨论】:

        猜你喜欢
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多