【问题标题】:How to combine all values from arrays如何组合数组中的所有值
【发布时间】:2020-11-23 09:41:09
【问题描述】:

我能够从这样的数组中获取所有独特的属性,

var array = [{
  "firstName": "John",
  "lastName": "Doe"
}, {
  "firstName": "Anna",
  "car": true
}, {
  "firstName": "Peter",
  "lastName": "Jones"
}];

var result = [];
array.reduce( function(pre, item) {
    Object.keys(item).forEach(function(i){
        if (result.indexOf(i) === -1){
            result.push(i);
        }
    });
});

console.log(result);

但是现在我需要这个输出,

[{   
    "firstName":"John, Anna, Peter",   
    "car": "true",   
    "lastName": "Doe, Jones" 
}]

但我不知道该怎么做?

【问题讨论】:

标签: javascript typescript


【解决方案1】:

您可以通过拥有一个存储属性所有值的查找对象来实现这一点。然后通过加入所有出现来操作该对象

下面的sn-p可以帮助你

var array = [
  {
    firstName: "John",
    lastName: "Doe",
  },
  {
    firstName: "Anna",
    car: true,
  },
  {
    firstName: "Peter",
    lastName: "Jones",
  },
]

var lookup = {}
var result = {}

array.forEach((obj) => {
  Object.entries(obj).forEach(([key, val]) => {
    if (!lookup[key]) {
      lookup[key] = [val]
    } else {
      lookup[key].push(val)
    }
  })
})

Object.entries(lookup).forEach(([key, val]) => {
  result[key] = val.join(', ')
})

console.log(result)

【讨论】:

    【解决方案2】:

    各种方式。这是一个:

    //get unique properties - hence Set, not array, so dups are omitted
    let props = new Set(array.map(obj => Object.keys(obj)).flat());
    
    //get non-falsy value for each prop type, as an array
    let vals = [...props].map(prop => array.map(obj => obj[prop]).filter(a => a).join(', '));
    
    //merge the two via Object.fromEntries()
    let final = Object.fromEntries.call(null, [...props].map((prop, i) => [prop, vals[i]]));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多