axios 方法来筛选此对象

5uzkadbs  于 2022-11-29  发布在  iOS
关注(0)|答案(5)|浏览(168)

我以下列方式收到了一个axiosapi响应,

res.data = { 
        material:['plate','bag','bottle'], 
        customer:['cust1','cust2','cust3'], 
        prod_id: [1122,3344,4445]
        }

现在我想把这个对象重新排列到表格中的显示数据中,

rowdata = [
        {
            materail:'plate',
            customer:'cust1',
            prod_id:'1122',
        },
        {
            materail:'bag',
            customer:'cust2',
            prod_id:'3344',
        },
        {
            materail:'bottle',
            customer:'cust3',
            prod_id:'4445',
        },
       ]

我是noob在javascript,许多东西对我来说仍然是新的,你的意见和帮助将是有用的。
我尝试了object.entries()、foreach()和map(),但无法实现rowdata格式。

wmomyfyw

wmomyfyw1#

最简单的方法可能是Map列表中的一个,然后使用索引访问其他列表。

const rowdata = res_data.material.map((material, index) => ({
    material,
    customer: res_data.customer[index],
    prod_id: res_data.prod_id[index],
});
h7wcgrx3

h7wcgrx32#

您可以在迭代时使用索引从其他数组中获取值。

const rowData = res.data.prod_id.map((prod_id, i) => {
  const material = res.data.material[i];
  const customer = res.data.customer[i];
  return {
    prod_id,
    material,
    customer,
  };
});
9rbhqvlz

9rbhqvlz3#

下面是我的代码,使用Object.keys()方法迭代数据,然后使用reduce()函数Map结果。

const raw = Object.keys(data).reduce((pre, current) => {
    return data[current].map((value, index) => ({
        [current]: value,
        ...pre[index],
    }));
}, []);
hrirmatl

hrirmatl4#

我同意@Ha Tai和@Nina Scholz的方法,但是每个循环的解构都是昂贵的。
以下是我的主张,但没有解构:

const properties=Object.keys(data)
  const result = data[properties[0]].map((elem, i) => {
    return properties.reduce((acc, curr) => {
        acc[curr] = data[curr][i]
      return acc
    }, {})
  })
xeufq47z

xeufq47z5#

独立于数据的方法

你可以转置和Map新的对象。这对任何深度都有效,只要长度和键数相同。
第一个

相关问题