簡體   English   中英

將字符串轉換為javascript關聯數組

[英]Converting a string to a javascript associative array

我有一個弦

string = "masterkey[key1][key2]";

我想從中創建一個關聯數組,以便它的計算結果為:

{
  masterkey: {
    key1: {
      key2: value
    }
  }
}

我已經試過了:

var fullName = string;
fullName = fullName.replace(/\[/g, '["');
fullName = fullName.replace(/\]/g, '"]');
eval("var "+fullName+";");

但是我得到了錯誤: missing ; before statement missing ; before statement ,帶有指向( [ )中第一個括號的箭頭。 "var masterkey["key1"]["key2"];"

我知道eval()不好用,所以如果您有任何建議,最好不使用它,我將不勝感激!

不是最漂亮的,但對我有用:

var
  path = "masterkey[key1][key2]",
  scope = {};

function helper(scope, path, value) {
  var path = path.split('['), i = 0, lim = path.length;
  for (; i < lim; i += 1) {
    path[i] = path[i].replace(/\]/g, '');

    if (typeof scope[path[i]] === 'undefined') {
      scope[path[i]] = {};
    }

    if (i === lim - 1) {
      scope[path[i]] = value;
    }
    else {
      scope = scope[path[i]];
    }
  }
}

helper(scope, path, 'somevalue');

console.log(scope);

演示: http//jsfiddle.net/hR8yM/

function parse(s, obj) {
    s.match(/\w+/g).reduce(function(o, p) { return o[p] = {} }, obj);
    return obj;
}

console.dir(parse("masterkey[key1][key2]", {}))

現在試試這個

string = "masterkey[key1][key2]";
var fullName = string;
fullName = fullName.replace(/\[/g, '[\'');
fullName = fullName.replace(/\]/g, '\']');

document.write("var "+fullName+";");

1)使用eval時,您提供的參數必須是有效的,完整的javascript。

 var masterkey["key1"]["key2"];

不是有效的javascript語句。

為變量分配值時,必須使用= 簡單地將一些值連接到變量名的末尾將不起作用。

2) var masterkey = ["key1"]["key2"]沒有意義。

這看起來像是嘗試將什么都沒有的“ key1”屬性的“ key2”屬性分配給masterkey。

如果您希望結果像您給出的示例對象一樣,那就是您需要創建的對象。 也就是說,正確解析字符串以創建對象比使用正則表達式將其轉換為要評估的腳本更好。

暫無
暫無

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

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