Javascript 查找嵌套对象
考虑一个对象Javascript 查找嵌套对象,javascript,Javascript,考虑一个对象 var obj = { val: 123, vals: { val: 45, vals: { val: 90 } }, name: 'abc', names: { name: 'xyz' } }; 我需要这样的东西: var obj = { val: 123, vals_val: 45, vals_vals_val: 90
var obj = {
val: 123,
vals: {
val: 45,
vals: {
val: 90
}
},
name: 'abc',
names: {
name: 'xyz'
}
};
我需要这样的东西:
var obj = {
val: 123,
vals_val: 45,
vals_vals_val: 90,
name: 'abc',
names_name: 'xyz'
};
有人能告诉我如何进入嵌套对象并访问属性及其值吗?我试着在循环中使用..,但没有得到任何想法。你可以这样做。我要树立一个榜样:
var John={
年龄:23,,
地址:{
巴黎:“拉鲁”,
伦敦:“塔街”
},
姓:“史密斯”
};
文件。书写(“地址1:+John.Address.Paris”);
文件。书写(“姓氏:“+John.姓氏”);
文件。书写(“年龄:+John.Age”)
您可以使用reduce()
方法并返回新对象作为结果
var obj={“val”:123,“vals”:{“val”:45,“vals”:{“val”:90},“name”:“abc”,“name”:{“name”:“xyz”}
功能键(数据,上一个=“”){
返回Object.keys(数据).reduce(函数(r,e){
var key=prev+(prev.length?'.'+e:e)
如果(数据类型[e]=“object”)对象。分配(r,键(数据[e],键))
else r[key]=数据[e]
返回r;
}, {})
}
变量r=键(obj)
log(r)
您可以采用递归方法删除与新键不相同的项
函数更新(对象){
功能iter(o,p){
Object.keys(o).forEach(函数(k){
变量t;
if(o[k]&&typeof o[k]=“object”){
iter(o[k],p.concat(k));
}否则{
t=p.concat(k)。连接(“”);
对象[t]=o[k];
}
如果(k!==t){
删除o[k];
}
});
}
国际热核实验堆(对象,[]);
}
var对象={val:123,val:{val:45,val:{val:90}},名称:'abc',名称:{name:'xyz'};
更新(对象);
console.log(对象)代码>您正在谈论的对象也称为“字典”。看看这个问题的选择答案:看看这个,你能告诉我你给出的代码的逻辑或概述吗?我不希望逐行解释,只是一点概述或方法。Thanksarray传递typeof==“object”
,它们的元素将变成键。如果任何一个值是数组,这将爆炸。更好的(但仍然不是防弹的)检查是typeof data[e]==“object”&&object.getPrototypeOf(data[e])===object.prototype
如果任何值是Date
对象,此解决方案将完全忽略该属性。