JavaScript でネストされたオブジェクトに問題があります。オブジェクトのツリーを生成したいと思います。たとえば、次のようなツリーがあります。
var tree = {
item1: {
item11: {},
item12: {}
},
item2: {
item21: {
item211: {},
item212: {}
}
}
}
今、文字列にパスがあり(のように)、を使用してオブジェクトitem1.item11
に入れたいと思います。item111
tree
path
treePush
関数を呼び出した後、これが必要です:
var tree = {
item1: {
item11: {
item111: {}
},
item12: {}
},
item2: {
item21: {
item211: {},
item212: {}
}
}
}
今のところ、私はこのコードを持っていますが、これは新しいアイテムを目的のレベルではtree
なくルートに置きます:
//use example: treePush('item1.item11', 'item111', tree);
function treePush(path, value, tree) {
var branch = getBranch(path, tree);
branch[value] = {};
$.extend(tree, branch);
return tree;
}
function search(key, tree) {
//searches key in tree and generates path like 'item1.item11'
}
function getBranch(path, tree) {
var keys = path.split('.'),
obj = tree,
branch = {};
for(var i = 0; i < keys.length - 1; i++) {
var key = keys[i];
if (obj[key] === undefined) {
return {};
}
branch[key] = obj[key];
obj = obj[key];
}
return branch;
};
treePush
問題は関数 ( )の 5 行目にあると思いますが、機能branch[value] = {};
させることができません。どんな助けでも感謝します。