优化JavaScript

时间:2018-04-28 14:03:49

标签: javascript arrays angular performance

有人可以帮我找到优化以下代码的最佳方法,因为我需要花费很长时间才能查找数千条记录

var arr =[
   {
      children:[
         {
            children:[
               {
                  children:[
                     {
                        name:'XYZZZZZ'
                     }
                  ]
               }
            ]
         }
      ]
   }
];

        let list = [];

        //Calculate column list
        arr.forEach((obj0) => {
            if (obj0.hasOwnProperty('children')) {
                if (obj0.children.length > 0) {
                    let objchid1 = obj0.children;
                    objchid1.forEach((obj1) => {
                        if (obj1.hasOwnProperty('children')) {
                            if (obj1.children.length > 0) {
                                let objchid2 = obj1.children;
                                objchid2.forEach((obj2) => {
                                    if (obj2.hasOwnProperty('children')) {
                                        if (obj2.children.length > 0) {
                                            let objchid3 = obj2.children;
                                         objchid3.forEach((obj3) => {
                                            if (obj3.name !== 'james') {
                                    console.log('IN THREEE', obj3.name);
                                                list.push(obj3.name);
                                                }
                                            });

                                        }
                                    }
                                });
                            }
                        }
                    });
                }
            }
        });

我已经尝试了很多搜索但没有运气提前谢谢。!!!

2 个答案:

答案 0 :(得分:2)

  1. 优化您的数据结构。除非确实需要,否则不要使用嵌套数组。 NoSQL在WebDev中如此受欢迎,因为读取比写入多出100,000倍并且节省带宽(对于您和用户而言)比在数据库中保存重复数据更值钱(考虑到硬件便宜)
  2. 您可以将最深的数组的元素保存为对象键(在您的情况下使用嵌套的.name属性),并将数组中相应位置的索引保存为对象值。这样你就可以$article->path() 只在嵌套数组上迭代一次(用于构建myArray[myElementsToIndexObject['elementIamLookingFor']]

答案 1 :(得分:0)

如果数据来自JSON字符串,则可以在解析期间进行搜索:

var list = [], json = '[{"child":[{"child":[{"child":[{"name":"XYZZZZZ"}]}]}]}]'

var arr = JSON.parse(json, (key, val) => (key === 'name' && list.push(val), val))

console.log(list)
console.log(arr)