取对象属性相同的value javaScript

只要b1属性值有相同的,就把后面相同的都扔进children数组里面去

let obj = [{'a1': 'bbb', 'b1': 'jkk'}, {'a1': 'ccc', 'b1': 'jkp'}, {'a1': 'ddd', 'b1': 'jkk'}, {'a1': 'eee', 'b1': 'jkk'},...];

//想要的最后结果
[{
    'a1': 'bbb',
    'b1': 'jkk',
    children: [{
        'a1': 'ddd',
        'b1': 'jkk'
    },{
        'a1': 'eee',
        'b1': 'jkk'
    }],
}, {
    'a1': 'ccc',
    'b1': 'jkp'
}];
阅读 1.8k
1 个回答
let obj = [{'a1': 'bbb', 'b1': 'jkk'}, {'a1': 'ccc', 'b1': 'jkp'}, {'a1': 'ddd', 'b1': 'jkk'}, {'a1': 'eee', 'b1': 'jkk'}];

function dealObj(obj) {
    let keyIndex = {}, objItem, result = [], index;
    for (let i = 0; i < obj.length; i++) {
        objItem = obj[i];
        if (undefined === keyIndex[objItem.b1]) {
            index = result.length;
            keyIndex[objItem.b1] = index;
            result.push(objItem);
        } else {
            index = keyIndex[objItem.b1];
            if (undefined === result[index].children) result[index].children = [];
            result[index].children.push(objItem);
        }
    }
    return result;
}

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