如何二维数组转一维数组对象

const keys = [
  'item',
  'des',
  'qty',
  'size',
  'unitPrice',
  'discountPct',
  'totalPrice',
]
const res = [
  ['304248', '343308',...],
  ['AAA', 'BBB',...],
  [2, 1,...],
  ['100 tests', '100 tests',...],
  [295, 275,...],
  [38, 38,...],
  [365.8, 170.5,...],
]

变成

[
  {
    item: '304248',
    des: 'AAA',
    qty: '2',
    size: '100 tests',
    unitPrice: '295',
    discountPct: '38',
    totalPrice: '365.8',
  },
  {
    item: '343308',
    des: 'BBB',
    qty: '1',
    size: '100 tests',
    unitPrice: '275',
    discountPct: '38',
    totalPrice: '170.5',
  },
]
阅读 2.8k
4 个回答
res[0].reduce((r,_,i) => {
  r.push(keys.reduce((o,k,j) => (o[k] = res[j][i], o), {}))
    return r
}, [])
res.reduce((arr, vals, index) => {
  vals.forEach((v, i) => (arr[i] ??= {})[keys[index]] = v)
  return arr;
}, []);
const result = [];
for (let i = res.length - 1; -1 < i; i -= 1) {
    const key = keys[i];
    const items = res[i];

    for (let j = items.length - 1; -1 < j; j -= 1) {
        (result[j] ??= {})[key] = items[j];
    }
}
function transform(arr, keys) {
    var ret = [];
    for (var i = 0; i < arr.length; ++i) {
        for (var j = 0; j < arr[i].length; ++j) {
            (ret[j] = ret[j] || {})[keys[i]] = arr[i][j];
        }
    }
    return ret;
}
console.dir(transform(res, keys));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题