将内部相同对象的属性中的值连接起来

时间:2018-07-23 18:24:26

标签: javascript arrays object

我有一个对象数组,像这样:

let array = [{
    "Age": 20,
    "Name": "Kevin"
}, {
    "Age": 15,
    "Name": "Alfred"
}, {
    "Age": 30,
    "Name": "Joe"
}];

我想要一个这样的对象:

{
    "Age": '20, 15, 30',
    "Name": 'Kevin, Alfred, Joe'
}

如果我这样做:

let r = array.reduce(function(pV, cV) {
    Object.keys(cV).map(function(key){
        pV[key] = (pV[key] || []).concat(cV[key]);
    });
    return pV;
},{});

console.log(r); // { "Age": [20, 15, 30], "Name": ['Kevin', 'Alfred', 'Joe'] }

或者,如果我这样做:

let r = array.reduce(function(pV, cV) {
    Object.keys(cV).map(function(key){
        pV[key] = (pV[key] || '') + ', ' + cV[key];
    });
    return pV;
},{});

console.log(r); // { "Age": ', 20, 15, 30', "Name": ', Kevin, Alfred, Joe' }

我有点迷路了。有关如何获得所需物品的一些想法?

4 个答案:

答案 0 :(得分:3)

您与第二个方法非常接近,只需确保不出现开头的,,使用三元数就很容易了:

let r = array.reduce(function(pV, cV) {
  Object.keys(cV).map(function(key){
      pV[key] = (pV[key] ? (pV[key] + ", ") :  '') + cV[key];
  });
  return pV;
},{});

答案 1 :(得分:2)

您可以尝试使用.reduce()Object.keys

跟随代码

let array = [{
    "Age": 20,
    "Name": "Kevin"
}, {
    "Age": 15,
    "Name": "Alfred"
}, {
    "Age": 30,
    "Name": "Joe"
}];

let result = array.reduce((current,result) => {
	Object.keys(current).forEach(key => {
		if(!result[key]){
			result[key] = current[key];
		} else {
			result[key]+= ", " + current[key];
		}
	})
	return result;
},{});

console.log(result);

答案 2 :(得分:2)

我不会像这样使用reduce,这只是光荣的循环:

let r = {};
for (const cV of array) {
    for (const key in cV) {
        r[key] = (r[key] || []).concat(cV[key]);
    }
}

对于一种实用的方法,在map实际上有用的情况下,我将迭代嵌套在相反的方向:

let r = {};
for (const key of ["Age", "Name"]) { // or Object.keys(array[0])
    r[key] = array.map(function(cV){
        return cV[key];
    }).join(", ");
}

答案 3 :(得分:0)

您也可以采用这种方式。

 array.reduce((a,n)=>{
 a.Age =  a.Age+','+n.Age;
a.Name = a.Name+','+n.Name;
return a;
});

警告!这种方法与修改对象的实际数组有关。 如果这不是故意的,那么您可以先克隆对象,然后再进行reduce。

我做了JSON.parse(JSON.stringify(array))的克隆数组,您可以使用自己的方式对它进行深度克隆。

JSON.parse(JSON.stringify(array)).reduce((a,n)=>{
 a.Age =  a.Age+', '+n.Age;
a.Name = a.Name+', '+n.Name;
return a;
})