组合数组元素并发送响应

combine array elements and send response

这是我在单击表单提交按钮时发送的请求正文:

{ 
    "name":'test', 
    "age":'test1', 
    "appId":[10,20,30], 
    "dataId":[1,2,3] 
}

我想修改成这样:

[
    { name: "test", age: "test1", appId: 10, dataId: 1 },
    { name: "test", age: "test1", appId: 10, dataId: 2 },
    { name: "test", age: "test1", appId: 10, dataId: 3 },
    { name: "test", age: "test1", appId: 20, dataId: 1 },
    { name: "test", age: "test1", appId: 20, dataId: 2 },
    { name: "test", age: "test1", appId: 20, dataId: 3 },
]

这需要使用 Javascript (ES6) 来完成。

let combinedArray = [];
array1.forEach((element, index) => {
    let batch = [];
    array2.forEach((element2, index2) => {
         batch.push({
              appid: element,
              dataid: element2
         });
    });
    combinedArray.push(...batch);
});

类似的东西。 假设数组长度相同且顺序正确,这似乎是最简单的方法。您可以改用 for 循环。

实际上,这似乎也不是正确的解决方案。我不确定你试图用你的例子实现什么样的模式,所以我会这样离开。您可以根据需要调整算法。

编辑是因为我 re-read 这个问题。

这是笛卡尔积:

const cartesian = (a, b) => a.flatMap(appid => b.map(dataid => ({appid, dataid})));

console.log(cartesian(["a", "b", "c"], [1, 2, 3]));

在下面的评论中,您提供了一个围绕两个输入数组的对象包装器,并希望将其他对象属性复制到结果对象中。

那么就变成了:

const cartesian = (obj, a, b) => 
    obj[a].flatMap(x => obj[b].map(y => ({...obj, [a]: x, [b]: y}) ));


const response = {name:'test', age:'test1', appId:[10,20,30], dataId:[1,2,3]};
const result = cartesian(response, "appId", "dataId");
console.log(result);

[].concat.apply([],[1,2,3].map(x => [1,2,3].map(y=> { return {'a': x, 'b':y}})))
Const arr1 = [a1, a2, a3];
Const arr2 =[d1, d2, d3];
Const arr3 = [];

for(let i = 0;i<arr1.length;i++){
  for(let b=0;b<arr2.length;b++){
   return arr3.push({appid: arr1[i], dataid: arr2[b] })
}
}