【发布时间】:2019-11-08 09:55:32
【问题描述】:
我想为一个对象创建一个 group-By 函数,在其中我按一个字段对数组进行分组,然后通过相应的 group-object 字段从数组中“强制”即将到来的文档的所有字段。
const groupInDoc = (array, fieldname) => {
let groupedResultDoc = array.reduce((carDocs, current) => {
let keyCount = Object.keys(current).length;
let obj = {};
for (let [key, value] of Object.entries(current)) {
console.log(`${key}: ${value}`);
//check if key is same as the fieldname to group-by.
if (key == fieldname) {
} else {
obj[key] = value;
}
}
if (carDocs.hasOwnProperty(current[fieldname])) {
//if (Array.isArray(carDocs[current[fieldname]])){
carDocs[current[fieldname]] = obj;
//}
} else {
carDocs[current[fieldname]] = obj;
}
return carDocs;
}, Object.create({}));
return groupedResultDoc;
}
我现在有一个问题,如何通过数组对象中的其他相应对象字段来扩展分组对象的字段?
例如,如果我的分组对象有一个包含字段数组和字段“字符串”的组键的子文档,那么我想将匹配组对象中的所有新数组值推送到旧数组中,并且我还想将字符串与“+”一起强制...我该怎么做?
编辑:我的原始数据:
let doc = [
{
"car": "Ford",
"prices": ["12", "3", "5", "1"],
"model": "SUV"
},
{
"car": "Ford",
"prices": ["99","88","77"],
"model": "T3"
},
{
"car": "Toyota",
"prices": ["33","44","55"],
"model": "Subaru"
},
{
"car": "Toyota",
"prices": ["66", "50", "22"],
"model": "Cheyenne"
},
{
"car": "Peugeot",
"prices": ["1","2","3"],
"model" : "503"
}
];
我的结果是:
CarDocs: { Ford: { prices: [ '99', '88', '77' ], model: 'T3' },
Toyota: { prices: [ '66', '50', '22' ], model: 'Cheyenne' },
Peugeot: { prices: [ '1', '2', '3' ], model: '503' } }
但应该是:
CarDocs: { Ford: { prices: ["12", "3", "5", "1", '99', '88', '77' ], model: 'T3', 'SUV' },
Toyota: { prices: [33","44","55", '66', '50', '22' ], model: 'Cheyenne', 'Subaru' },
Peugeot: { prices: [ '1', '2', '3' ], model: '503' } }
【问题讨论】:
-
你能发布你的原始数据吗?我的意思是初始数组
-
是的,抱歉,我在原帖中添加了它
-
model在这里必须是一个数组或单个字符串。
标签: javascript arrays ecmascript-6 group-by document