簡體   English   中英

如何將char添加到javascript對象鍵和值?

[英]How to add char to javascript object keys and values?

我試圖將'_x'添加到每個對象鍵,並將'_y'到每個對象值。 這是代碼:

var data = {
  "glossary": {
    "title": "example glossary",
    "GlossDiv": {
      "title": "S",
      "GlossList": {
        "GlossEntry": {
          "ID": "SGML",
          "SortAs": "SGML",
          "GlossTerm": "Standard Generalized Markup Language",
          "Acronym": "SGML",
          "Abbrev": "ISO 8879:1986",
          "GlossDef": {
            "para": "A meta-markup language, used to create markup languages such as DocBook.",
            "GlossSeeAlso": "GMLXML"
          },
          "GlossSee": "markup"
        }
      }
    }
  }
}

function treee(data) {
  Object.keys(data).map( function (key) {
    if(Object.keys(data[key]).length == 0){
      data[key] =  {[key + "_x"]: data[key] + "_y"};
    }
    else{
      data[key] =  { [key + "_x"]: treee(data[key]) };
    }
  });
}

它不起作用,我也不知道為什么。 你能告訴我出什么問題了嗎?

基本上,您需要新密鑰而不是舊密鑰,然后刪除實際的密鑰。

如果需要,另一部分是更改內部對象。

 function treee(data) { Object.keys(data).map(function (key) { if (data[key] && typeof data[key] === 'object') { treee(data[key]); } data[key + '_x'] = typeof data[key] === 'string' ? data[key] + '_y' : data[key]; delete data[key]; }); } var data = { glossary: { title: "example glossary", GlossDiv: { title: "S", GlossList: { GlossEntry: { ID: "SGML", SortAs: "SGML", GlossTerm: "Standard Generalized Markup Language", Acronym: "SGML", Abbrev: "ISO 8879:1986", GlossDef: { para: "A meta-markup language, used to create markup languages such as DocBook.", GlossSeeAlso: "GMLXML" }, GlossSee: "markup" } } } } }; treee(data); console.log(data); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

如果將對象轉換為JSON,然后使用字符串替換,則這樣做更容易:

 var data = { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": "GMLXML" }, "GlossSee": "markup" } } } } } var jsonString = JSON.stringify(data), replacedValues = jsonString .replace(/([\\w.])"/g, '$1_y"') // Add _y to all strings in there. .replace(/_y":/g, '_x":') // Replace _y with _x for all keys. newData = JSON.parse(replacedValues); console.log(newData); 

另一種選擇是在解析JSON時,使用正則表達式替換鍵,然后使用reviver函數修改值:

 var data = { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": "GMLXML" }, "GlossSee": "markup" } } } } } var jsonString = JSON.stringify(data) .replace(/":/g, '_x":'); // Add _x to all keys. var newData = JSON.parse(jsonString, function(key, val){ if(typeof val === 'string') // For every value, if the value is a string return val + '_y'; // Add `_y` return val; // Otherwise, just return the value. }); console.log(newData); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM