【问题标题】:How to convert an object into a nested array?如何将对象转换为嵌套数组?
【发布时间】:2021-03-23 16:49:42
【问题描述】:

我有一个对象 request 如下:-

var request = {
  itemname1: 'Adidas T-Shirt',
  category1: 'T-Shirt',
  brand1: 'Adidas',
  size1: 'M',
  amount1: '599',
  itemname2: 'Jockey Vest',
  category2: 'Vest',
  brand2: 'Jockey',
  size2: 'S',
  amount2: '299'
}

我想把它转换成一个嵌套数组,如下:-

insert_values = [ ['Adidas T-Shirt','T-Shirt','Adidas','M','599'], ['Jockey Vest','Vest','Jockey','S','299'] ]

这个嵌套数组将被传递到 mysql 数据库中以进行批量插入。我对 forEach 方法不太熟悉,因此无法按索引正确循环请求对象。我该怎么做?

【问题讨论】:

  • “所以我无法正确循环请求对象” - 因为对象没有.forEach() 方法... - 到目前为止您尝试解决什么问题这是你自己的? -> How do I ask a good question?
  • 你需要得到一个对象数组作为request。使用递增键将多个对象填充到一个对象中是一种糟糕的结构。

标签: javascript arrays object


【解决方案1】:

您需要使用Object.entries 将对象转换为数组,通过从每个键末尾的数字推断索引来将数组减少为新数组:

const data = Object.entries({
  itemname1: 'Adidas T-Shirt',
  category1: 'T-Shirt',
  brand1: 'Adidas',
  size1: 'M',
  amount1: '599',
  itemname2: 'Jockey Vest',
  category2: 'Vest',
  brand2: 'Jockey',
  size2: 'S',
  amount2: '299'
}).reduce((carry, [key, value]) => {
    const [text] = key.split(/\d+/);
    const index = key.substring(text.length) - 1;
    if (!Array.isArray(carry[index])) carry[index] = [];
    carry[index].push(value);
    return carry;
}, []);

console.log(data);

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2017-11-15
    • 2020-07-03
    • 1970-01-01
    • 2015-03-26
    • 2019-01-31
    相关资源
    最近更新 更多