合并相同数据

var data = [{"menu":47,"children":[56]},{"menu":47,"children":[55]},{"menu":48,"children":[59]},{"menu":48,"children":[58]}]
遍历data找出相同menu在合并children,得到下面数据结构
[{"menu":47,"children":[55,56]},{"menu":48,"children":[58,59]}]

阅读 3k
4 个回答

ES6:

var data = [
  {
    "menu": 47, "children": [56,57,56]
  }, {
    "menu": 47, "children": [55,57,58]
  }, {
    "menu": 48, "children": [59,57,58]
  }, {
    "menu": 48, "children": [58]
  }
  ];

let tempObj = {};
let newArr = [];

data.forEach(elem => {
  if (tempObj[elem.menu]) {
    tempObj[elem.menu] = tempObj[elem.menu].concat(elem.children)
  } else {
    tempObj[elem.menu] = [].concat(elem.children)
  }
});

newArr = Object.entries(tempObj).map(elem => {
  elem[1] = [...new Set(elem[1])];
  return {
    "menu": parseInt(elem[0]),
    "children": elem[1],
  }
});

ES5:


var tempObj = {};
var newArr = [];

data.forEach(function(elem) {
  if (tempObj[elem.menu]) {
    tempObj[elem.menu] = tempObj[elem.menu].concat(elem.children)
  } else {
    tempObj[elem.menu] = [].concat(elem.children)
  }
});

var tmpArr = [];
for (var obj in tempObj) {
  tmpArr.push([obj,tempObj[obj]])
}

tmpArr.map(function(elem) {
  elem[1] = elem[1].filter(function(ele,index,array){
    return index===array.indexOf(ele)
  });
  
  return {
    "menu": parseInt(elem[0]),
    "children": elem[1],
  }
});

建议你把children数据一开始就弄成数组形式的, 后面的几乎都能百度到, 看你功底了

loadData() {
        let d = this.data;
        //获取不重复的menu选项 menuOpt => [47,48]
        let menuOpt = Array.from(new Set(d.map(v => v.menu)));
        //处理数据
        let d_copy = menuOpt.map(m => {
              //获取同一个menu下的children
              let itemArr = d.map(v => {
                if (v.menu === m) {
                  return v.children;
                }
              })
              //合并children
              let children = [];
              itemArr.forEach(v => {
                if (v) {
                  children = children.concat(v);
                }
              });
              //对children去重
              children = [...new Set(children)];
              return {
                menu: m,
                children: children
              }
        })
        console.log('d_copy =>\n', d_copy)
  }

图片描述

var data = [{"menu":47,"children":[56]},{"menu":47,"children":[55]},{"menu":48,"children":[59]},{"menu":48,"children":[58]}],
    newData = [];
    
data.map(function(d) {
    
    var boo = false,
        i = 0,
        len = newData.length;
    
    for(; i < len; i++){
        
        var nd = newData[i];
        
        boo = nd.menu === d.menu ? true : false;
        
        if(boo) {
        
            nd.children.push(d.children[0])
            break;
        
        }
    
    }

    boo ? '' : newData.push(d);

});

console.log(newData);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题