javascript - 试图从 Map 的数组中获取正确的最终格式,以使用 REST API 进行更新,但不能完全 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);
}

这是一个可重现的示例,我的第一次尝试是从 Map 形成一个数组:

const finalizado = Array.from(a)

那没有用,然后我尝试给它一些格式:

const finalizado = Array.from(a, [key, value] => {
  return ([key]: value);
}

但是我认为我已经超出了我的深度,我无法理解格式。

回答1

解决方案

使用 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);

相似文章

twilio - DevTools 无法加载源 map

我知道Chrome开发工具中有很多关于这些警告的帖子。对于所有这些,解决方案是关闭通知“启用javascript源maps”和“启用CSS源maps”。我想知道的是如何解决这个问题,以及导致这些警告的...