js/es6 数组中具有相同字段的对象合并

数组数据中相同字段的对象合并为一条

let data = [
    { aa: '11', value: '11' },
    { aa: '11', value1: '22'},
    { aa: '11', value2: '33'},
    { aa: '22', value: '11' },
    { aa: '22', value1: '22'},
]

期望结果

let data = [
    { aa: '11', value: '11', value1: '22', value2: '33' },
    { aa: '22', value: '11', value1: '22' },
]

求解答

阅读 4.3k
2 个回答
let data = [
  { aa: '11', value: '11' },
  { aa: '11', value1: '22' },
  { aa: '11', value2: '33' },
  { aa: '22', value: '11' },
  { aa: '22', value1: '22' },
]
let res = [], obj = {};
data.forEach(item => {
  if (obj[item.aa]) {
    Object.assign(obj[item.aa], item)
  } else {
    obj[item.aa] = item
  }
})
res = Object.values(obj)
function merge(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; ++i) {
        var count = 0; 
        iterate: for (var key in arr[i]) {
            var value = arr[i][key];
            if (!count++) {
                for (var j = 0; j < ret.length; ++j) {
                    if (ret[j][key] === value) {
                        continue iterate;
                    }
                }
                var obj = {};
                obj[key] = value;
                ret.push(obj);
            } else {
                for (var j = 0; j < ret.length; ++j) {
                    if (!ret[j][key]) ret[j][key] = value;
                }
            }
        }
    }
    return ret;
}
console.dir(merge(data));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏