【问题标题】:Format array for batch api call in JavascriptJavascript中批处理api调用的格式数组
【发布时间】:2021-10-31 05:12:42
【问题描述】:

我有一个这种格式的数组:

var customerList = [{'email: ex@mail.com', 'name': 'John'}, {...}, {...}]

但是我需要为数组中的每个对象格式化一个批处理 api 调用,格式如下:

api.post('/:batch_endpoint'), {
   0: {url: '/:endpoint', data: {email: customerList[0].email}}, 
   1: {...},
   2: {...},
}

所以基本上我想知道是否有一种方法可以从该数组或另一个列表中动态填充 api 调用的记录。到目前为止,我尝试使用Object.assign(),但不确定这是否是正确的前进方向:

var customerObject = Object.assign({}, customerList) 输出:

{
  '0': {
   email: 'ex@mail.com',
   '...',
 },
  1: {...}
}

除此之外,我不确定如何正确格式化此 api 调用。

【问题讨论】:

    标签: javascript node.js arrays json


    【解决方案1】:

    假设您询问如何将批量更新作为基于第一个索引的数组(而不是基于第 0 个索引)发送,您至少有两个选项:

    选项一:使用reduce方法给key加一:

    customerList.reduce((acc, data, idx) => ({
      ...acc,
      [parseInt(idx) + 1]: {
        url: "/:endpoint",
        data
      }
    }), [])
    

    选项 2:使用 unshift 方法将“垃圾”值添加到 0th 索引:

    // Convert the values in the array into the shape you want to send
    customerList.map(data => ({ url: "/:endpoint", data }))
    
    // Insert garbage value at index 0
    customerList.unshift(0)
    
    

    选项 3:如果您计划频繁发送数据,请更新您的 API 以支持 0th 索引数组。 IMO,上述两种解决方案都是一种黑客行为,并不理想。但是,在您的情况下,这可能是不可能的。

    【讨论】:

    • 对不起,我应该早点检查一下,它确实适用于 0 索引数组。解决方案是不使用reduce吗?
    • 您是在问如何像这样格式化customerList中的数据吗? {url: '/:endpoint', data: {email: customerList[0].email}}
    • 抱歉,是的,我使用您的第二个解决方案解决了这个问题。非常感谢!
    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多