尝试从 Map 中获取数组中正确的最终格式,以使用 REST API 进行更新,但不完全是 JS
Trying to get the right final format in an Array from a Map, to update using a REST API, but can't quite JS
我正在尝试格式化一些数据以使用 Woocommerce REST 进行批量更新 API。
目标数组格式:
update: [
{
id: 1,
app: 'string1string2string3'
},
{
id: 2,
app: 'string2'
},
{
id: 3,
app: 'string2'
},
{
id: 5,
app: 'string2'
}
]
可重现的例子
arr1 = [{
id: 1,
app: 'string1'
}, {
id: 1,
app: 'string2'
}, {
id: 1,
app: 'string3'
}, {
id: 2,
app: 'string2'
}, {
id: 3,
app: 'string2'
}, {
id: 5,
app: 'string2'
}];
let a = new Map();
arr1.forEach((e) => {
if (a.get(e.id)) {
a.get(e.id).app += e.app;
} else {
a.set(e.id, e)
}
})
const finalizado = Array.from(a)
console.log(finalizado);
var temporary, chunk = 100;
for (let i = 0; i < finalizado.length; i += chunk) {
temporary = finalizado.slice(i, i + chunk);
var payloadUp = {
update: temporary
};
console.log(payloadUp);
}
这是一个可重现的例子,我的第一次尝试是从地图中形成一个数组:
const finalizado = Array.from(a)
那没用,然后我试着给它一些格式:
const finalizado = Array.from(a, [key, value] => {
return ([key]: value);
}
但我想我已经超出了我的理解范围,我无法理解格式。
解决方案
使用reduce()
和Object.values()
可以随意设置目标数组:
arr1 = [{
id: 1,
app: 'string1'
}, {
id: 1,
app: 'string2'
}, {
id: 1,
app: 'string3'
}, {
id: 2,
app: 'string2'
}, {
id: 3,
app: 'string2'
}, {
id: 5,
app: 'string2'
}];
const arrayHashmap = arr1.reduce((obj, item) => {
obj[item.id] ? obj[item.id].app = obj[item.id].app.concat(item.app) : (obj[item.id] = { ...item });
return obj;
}, {});
const mergedArray = Object.values(arrayHashmap);
console.log(mergedArray);
我正在尝试格式化一些数据以使用 Woocommerce REST 进行批量更新 API。
目标数组格式:
update: [
{
id: 1,
app: 'string1string2string3'
},
{
id: 2,
app: 'string2'
},
{
id: 3,
app: 'string2'
},
{
id: 5,
app: 'string2'
}
]
可重现的例子
arr1 = [{
id: 1,
app: 'string1'
}, {
id: 1,
app: 'string2'
}, {
id: 1,
app: 'string3'
}, {
id: 2,
app: 'string2'
}, {
id: 3,
app: 'string2'
}, {
id: 5,
app: 'string2'
}];
let a = new Map();
arr1.forEach((e) => {
if (a.get(e.id)) {
a.get(e.id).app += e.app;
} else {
a.set(e.id, e)
}
})
const finalizado = Array.from(a)
console.log(finalizado);
var temporary, chunk = 100;
for (let i = 0; i < finalizado.length; i += chunk) {
temporary = finalizado.slice(i, i + chunk);
var payloadUp = {
update: temporary
};
console.log(payloadUp);
}
这是一个可重现的例子,我的第一次尝试是从地图中形成一个数组:
const finalizado = Array.from(a)
那没用,然后我试着给它一些格式:
const finalizado = Array.from(a, [key, value] => {
return ([key]: value);
}
但我想我已经超出了我的理解范围,我无法理解格式。
解决方案
使用reduce()
和Object.values()
可以随意设置目标数组:
arr1 = [{
id: 1,
app: 'string1'
}, {
id: 1,
app: 'string2'
}, {
id: 1,
app: 'string3'
}, {
id: 2,
app: 'string2'
}, {
id: 3,
app: 'string2'
}, {
id: 5,
app: 'string2'
}];
const arrayHashmap = arr1.reduce((obj, item) => {
obj[item.id] ? obj[item.id].app = obj[item.id].app.concat(item.app) : (obj[item.id] = { ...item });
return obj;
}, {});
const mergedArray = Object.values(arrayHashmap);
console.log(mergedArray);