mcg*_*ilm 13 javascript arrays jquery json
让我说我想这样做:
var dashboard = {};
var page = "index";
$('.check').click(function(){
$(this).toggleClass("active").siblings().slideToggle('slow', function() {
dashboard['pages'][page][$(this).closest('li').attr("id")]['show'] = $(this).is(":hidden") ? 'collapsed' : 'expanded';
});
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说:
Dashboard.pages未定义
有没有动态添加pages和后续的孩子,而不必做检查的工作,看看它是否先被定义,然后如果它没有做:
dashboard['pages'] = {};
Run Code Online (Sandbox Code Playgroud)
因为有时它们可能已经存在,我不想首先检查树,我只想根据需要构建分支
编辑
我改变pagename,以page显示该网页的名称会改变,我也想指出的是,该页面可能真的什么太.这个想法是你有任何对象可以包含带参数的对象,而不检查分支是否存在
它看起来像$extend所说的那样只是不确定它是如何工作的.得到我的头脑.
Anu*_*rag 15
定义get和set方法Object.实际上它可以只在dashboard对象上定义,只有它的后代,但这很容易.
Object.prototype.get = function(prop) {
this[prop] = this[prop] || {};
return this[prop];
};
Object.prototype.set = function(prop, value) {
this[prop] = value;
}
Run Code Online (Sandbox Code Playgroud)
使用此get()方法迭代嵌套属性,set()并在必须设置值时调用.
var dashboard = {};
dashboard.get('pages').get('user').set('settings', 'oh crap');
// could also set settings directly without using set()
dashboard.get('pages').get('user').settings = 'oh crap';
console.log(dashboard); //??????????????? {pages: {user: {settings: "oh crap"}}};
Run Code Online (Sandbox Code Playgroud)
您还可以扩展/修改get方法,以将嵌套属性作为单个参数或数组或字符串接受.使用它,你只需要调用一次:
// get accepts multiple arguments here
dashboard.get('pages', 'user').set('settings', 'something');
// get accepts an array here
dashboard.get(['pages', 'user']).set('settings', 'something');
// no reason why get can't also accept dotted parameters
// note: you don't have to call set(), could directly add the property
dashboard.get('pages.user').settings = 'something';
Run Code Online (Sandbox Code Playgroud)
更新:
由于get方法通常返回一个对象,并且不知道您是否需要数组或其他类型的对象,因此您必须指定自己:
dashboard.get('pages.user').settings = [];
Run Code Online (Sandbox Code Playgroud)
然后你可以将项目推送到设置数组
dashboard.get('pages.user').settings.push('something');
dashboard.get('pages.user').settings.push('something else');
Run Code Online (Sandbox Code Playgroud)
要实际让get函数从给定的字符串(如pages.user)构造对象层次结构,您必须将字符串拆分为多个部分并检查每个嵌套对象是否存在.以下是修改后的版本get:
Object.prototype.get = function(prop) {
var parts = prop.split('.');
var obj = this;
for(var i = 0; i < parts.length; i++) {
var p = parts[i];
if(obj[p] === undefined) {
obj[p] = {};
}
obj = obj[p];
}
return obj;
}
// example use
var user = dashboard.get('pages.user');
user.settings = [];
user.settings.push('something');
user.settings.push('else');
console.log(dashboard); // {pages: {user: {settings: ["something", "else"] }}}
// can also add to settings directly
dashboard.get('pages.user.settings').push('etc');
Run Code Online (Sandbox Code Playgroud)