Javascript-遍历对象并更新属性
我希望有人能给我指出正确的方向 我有一个JavaScript对象,如下所示Javascript-遍历对象并更新属性,javascript,recursion,iteration,tree-traversal,Javascript,Recursion,Iteration,Tree Traversal,我希望有人能给我指出正确的方向 我有一个JavaScript对象,如下所示 var category = [{ isExpanded: false, name: "Electricals", subcategories: [{ isExpanded: false, name: "Audio", subcategories: null }, { isExpanded: false, na
var category = [{
isExpanded: false,
name: "Electricals",
subcategories: [{
isExpanded: false,
name: "Audio",
subcategories: null
}, {
isExpanded: false,
name: "Photography",
subcategories: null
}]
}, {
isExpanded: false,
name: "Telecoms",
subcategories: [{
isExpanded: false,
name: "Mobile",
subcategories: null
}, {
isExpanded: false,
name: "Sim-cards",
subcategories: null
}]
}, {
isExpanded: false,
name: "Entertainment",
subcategories: [{
isExpanded: false,
name: "Gaming",
subcategories: [{
isExpanded: false,
name: "Games",
subcategories: null
}]
}, {
isExpanded: false,
name: "Sports",
subcategories: null
}]
}];
我的目标是遍历每个类别/子类别,并根据我的逻辑设置“isExpandable”的值。有人能告诉我如何遍历对象的每个子类别,并记住一个子类别和一个子类别等等吗
这是我目前的尝试
function blah() {
for (var i = 0; i < category.length; i++) {
if (category[i].subcategories) {
console.log(category[i]);
traverseCategoryTree(category[i]);
}
}
}
function traverseCategoryTree(category) {
//iterate each subcategory and update is Expanded.
}
blah();
函数blah(){
对于(变量i=0;i
函数遍历类别树(类别){
对于(变量i=0,len=categories.length;i
函数遍历类别树(类别){
对于(变量i=0,len=categories.length;i
不要重新发明轮子。我们现在使用的是大部分数据处理。只要你把头绕在它身上,它就会很强大。以下是您的示例的工作方式:
//const objectScan=require('object-scan');
常量修改=(数据)=>objectScan(['***]']{
rtn:'计数',
filterFn:({value})=>{
value.isExpandable=(
Array.isArray(value.subcategories)
&&value.subcategories.length!==0
);
}
})(数据);
const category=[{isExpanded:false,name:'Electricals',子类别:[{isExpanded:false,name:'Audio',子类别:null},{isExpanded:false,name:'Photography',子类别:null},{isExpanded:false,name:'Telecoms',子类别:[{isExpanded:false,name:'Mobile',子类别:null},{isExpanded:false,名称:'Sim卡',子类别:null}]},{isExpanded:false,名称:'Entertainment',子类别:[{isExpanded:false,名称:'Gaming',子类别:[{isExpanded:false,名称:'Sports',子类别:null}]};
console.log(modify(category));//找到多少个匹配的
// => 10
控制台日志(类别);
//=>[{isExpanded:false,名称:'Electricals',子类别:[{isExpanded:false,名称:'Audio',子类别:null,isExpanded:false},{isExpanded:false,名称:'Photography',子类别:null,isExpandable:false}],isExpanded:true},{isExpanded:false,名称:'Telecoms',子类别:[{isExpanded:false,名称:'Mobile',子类别:null,isExpandable:false},{isExpanded:false,名称:'Sim卡',子类别:null,isExpandable:false}],isExpandable:true},{isExpanded:false,名称:'Entertainment',子类别:[{isExpanded:false,名称:'Gaming',子类别:[{isExpanded:false,名称:'Games',子类别:null,isExpandable:false}],isExpandable:true},{isExpanded:false,名称:'Sports',子类别:null,isExpandable:false}],isExpandable:true}]
。作为控制台包装{最大高度:100%!重要;顶部:0}
不要重新发明轮子。我们现在使用的是大部分数据处理。只要你仔细思考,它就会非常强大。下面是它在你的示例中的工作方式:
//const objectScan=require('object-scan');
常量修改=(数据)=>objectScan(['***]']{
rtn:'计数',
filterFn:({value})=>{
value.isExpandable=(
Array.isArray(value.subcategories)
&&value.subcategories.length!==0
);
}
})(数据);
const category=[{isExpanded:false,name:'Electricals',子类别:[{isExpanded:false,name:'Audio',子类别:null},{isExpanded:false,name:'Photography',子类别:null},{isExpanded:false,name:'Telecoms',子类别:[{isExpanded:false,name:'Mobile',子类别:null},{isExpanded:false,名称:'Sim卡',子类别:null}]},{isExpanded:false,名称:'Entertainment',子类别:[{isExpanded:false,名称:'Gaming',子类别:[{isExpanded:false,名称:'Sports',子类别:null}]};
console.log(modify(category));//找到多少个匹配的
// => 10
控制台日志(类别);
//=>[{isExpanded:false,名称:'Electricals',子类别:[{isExpanded:false,名称:'Audio',子类别:null,isExpanded:false},{isExpanded:false,名称:'Photography',子类别:null,isExpandable:false}],isExpanded:true},{isExpanded:false,名称:'Telecoms',子类别:[{isExpanded:false,名称:'Mobile',子类别:null,isExpandable:false},{isExpanded:false,名称:'Sim卡',子类别:null,isExpandable:false}],isExpandable:true},{isExpanded:false,名称:'Entertainment',子类别:[{isExpanded:false,名称:'Gaming',子类别:[{isExpanded:false,名称:'Games',子类别:null,isExpandable:false}],isExpandable:true},{isExpanded:false,名称:'Sports',子类别:null,isExpandable:false}],isExpandable:true}]
。作为控制台包装{最大高度:100%!重要;顶部:0}
使用递归函数使用递归函数
function traverseCategoryTree(categories) {
for (var i = 0, len = categories.length; i < len; i++) {
console.log(categories[i]);
if (categories[i].subcategories) {
traverseCategoryTree(categories[i].subcategories);
}
}
}
traverseCategoryTree(category);