使用groupBy下划线分组嵌套列表

grouping nested list using groupBy underscore

本文关键字:嵌套 列表 groupBy 下划线 使用      更新时间:2023-09-26

我有一个列表

 data = [{
        value1:[1,2],
        value2:[{type:'A'}, {type:'B'}]
    },{
        value1:[3,5],
        value2:[{type:'B'}, {type:'B'}]
    }]

这是我的列表格式,我希望这个列表格式为

data = [
    {type:'A', value: [1,2]},
    {type:'B', value: [3,5]}
]

如果您期待下面的结果

data = [
    {type:'A', value: [1,2]},
    {type:'B', value: [3,5]}
]

这是你想要的

 data = [{
        value1:[1,2],
        value2:[{type:'A'}, {type:'B'}]
    },{
        value1:[3,5],
        value2:[{type:'B'}, {type:'B'}]
    }]
 
data.forEach(function(item, index){
  var obj = {};
  obj.type = item.value2[0].type;
  obj.value = item.value1;
  console.log(obj);
})

您可以使用两个forEach()循环并在第一个forEach()循环中将object作为thisArg参数。

var data = [{
  value1: [1, 2],
  value2: [{
    type: 'A'
  }, {
    type: 'B'
  }]
}, {
  value1: [3, 5],
  value2: [{
    type: 'B'
  }, {
    type: 'B'
  }]
}]
var result = [];
data.forEach(function(o, i) {
  var that = this;
  o.value2.forEach(function(t) {
    if (!that[t.type]) {
      that[t.type] = {
        type: t.type,
        value: []
      }
      result.push(that[t.type]);
    }
    if (!that[i + '|' + t.type]) {
      that[t.type].value = that[t.type].value.concat(o.value1);
      that[i + '|' + t.type] = true;
    }
  })
}, {})
console.log(result)

您可以迭代并查找值。

var data = [{ value1: [1, 2], value2: [{ type: 'A' }, { type: 'B' }] }, { value1: [3, 5], value2: [{ type: 'B' }, { type: 'B' }] }],
    grouped = [];
data.forEach(function (a) {
    a.value2.forEach(function (b) {
        if (!this[b.type]) {
            this[b.type] = { type: b.type, value: [] };
            grouped.push(this[b.type]);
        }
        a.value1.forEach(function (c) {
            if (this[b.type].value.indexOf(c) < 0) {
                this[b.type].value.push(c);
            }
        }, this);
    }, this);
}, Object.create(null));
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }