基于其他属性(语言)更改JavaScript属性

基于其他属性(语言)更改JavaScript属性,javascript,json,Javascript,Json,我想使用基于语言的JavaScript更改对象department\u descr: var data = { "language": "EN", "contacts": [ { "department_descr": { "en": "Management", "fr": "Gestion" } } ] }; 输出: { "language": "EN", "contacts": [

我想使用基于语言的JavaScript更改对象
department\u descr

var data = {
  "language": "EN",    
  "contacts": [
    {
      "department_descr": {
        "en": "Management",
        "fr": "Gestion"
      }
    }
  ]
};
输出:

{  
  "language": "EN",  
  "contacts": [
    {
      "department_descr": "Management"
    }       
  ]
}

首先,示例对象的格式不正确,这将导致语法错误。将其更改为:

var data = {
  "language": "EN",    
  "contacts": [
      {
        "department_descr": {
          "en": "Management",
          "fr": "Gestion"
        }
      }
  ]
}
其次,在这种情况下不建议更改对象。应使用所需的模型创建新对象:

var desc = data.contacts[0].department_descr[data.language.toLowerCase()];
var newData = Object.assign({}, data, { contacts: [ { department_descr: desc } ] })

首先,示例对象的格式不正确,这将导致语法错误。将其更改为:

var data = {
  "language": "EN",    
  "contacts": [
      {
        "department_descr": {
          "en": "Management",
          "fr": "Gestion"
        }
      }
  ]
}
其次,在这种情况下不建议更改对象。应使用所需的模型创建新对象:

var desc = data.contacts[0].department_descr[data.language.toLowerCase()];
var newData = Object.assign({}, data, { contacts: [ { department_descr: desc } ] })

下面是一个函数,它将接受这样一个对象作为参数,并根据language属性设置描述

从技术上讲,它返回一个新对象,而不是改变现有对象,但在绝大多数情况下,这是您想要的

function setDescription(srcObject){
    let language = srcObject.language.toLowerCase();
    let outputObj = Object.assign({}, srcObject);
    outputObj.contacts = srcObject.contacts.map((contact) =>{
        let newDescription = contact.department_descr[language];
        contact.department_descr = newDescription;
        return contact;
    });
    return outputObj;
}
这将适用于任意长度的contacts数组。它有一些假设

  • 联系人数组中的语言为小写国家代码(“en”)
  • 联系人所需的匹配语言国家/地区代码位于同一对象的“language”属性中
  • “contacts”属性存在并且是一个数组

  • 下面是一个函数,它将接受这样一个对象作为参数,并根据language属性设置描述

    从技术上讲,它返回一个新对象,而不是改变现有对象,但在绝大多数情况下,这是您想要的

    function setDescription(srcObject){
        let language = srcObject.language.toLowerCase();
        let outputObj = Object.assign({}, srcObject);
        outputObj.contacts = srcObject.contacts.map((contact) =>{
            let newDescription = contact.department_descr[language];
            contact.department_descr = newDescription;
            return contact;
        });
        return outputObj;
    }
    
    这将适用于任意长度的contacts数组。它有一些假设

  • 联系人数组中的语言为小写国家代码(“en”)
  • 联系人所需的匹配语言国家/地区代码位于同一对象的“language”属性中
  • “contacts”属性存在并且是一个数组

  • 演示:

    var数据={
    “语言”:“EN”,
    “联系人”:[
    {
    “部门描述”:{
    “en”:“管理”,
    “fr”:“手势”
    }
    }
    ]
    };
    for(data.contacts的变量i){
    if(Object.keys(i.department\u descr).includes(data.language.toLowerCase())==true){
    i、 department_descr=i.department_descr[data.language.toLowerCase();
    }
    }
    
    控制台日志(数据)演示:

    var数据={
    “语言”:“EN”,
    “联系人”:[
    {
    “部门描述”:{
    “en”:“管理”,
    “fr”:“手势”
    }
    }
    ]
    };
    for(data.contacts的变量i){
    if(Object.keys(i.department\u descr).includes(data.language.toLowerCase())==true){
    i、 department_descr=i.department_descr[data.language.toLowerCase();
    }
    }
    
    控制台日志(数据)这些是JavaScript对象。JSON是一种序列化格式,其中数据转换为文本。您尝试了什么?这些是JavaScript对象。JSON是一种序列化格式,其中数据转换为文本。您尝试了什么?很好:-)将其标记为答案,以便其他人会找到它很好:-)将其标记为答案,以便其他人会找到它