【问题标题】:Create an array of objects based on an object if one or more properties have multiple values differentiated by a comma如果一个或多个属性具有以逗号区分的多个值,则创建基于对象的对象数组
【发布时间】:2023-01-19 20:53:34
【问题描述】:

我正在尝试根据两个属性复制对象,这两个属性具有多个值,用逗号区分。 例如:

我有一个对象

const obj = {
  id: 1
  date: "2021"
  tst1: "111, 222"
  tst2: "AAA, BBB"
}

在这种情况下,我希望结果是 2 个对象的数组(因为 tst1 或 tst2 中有 2 个值,这 2 个属性将始终具有相同的 nr 值,用逗号区分)

[{
  id: 1,
  date: "2021",
  tst1: "111",
  tst2: "AAA",
},
{
  id: 1,
  date: "2021",
  tst1: "222",
  tst2: "BBB",
}]

我试过的是:

我创建了一个临时对象

const tempObject = {
      id: obj.id,
      date: obj.date,
}

然后我将拆分并映射具有多个值的属性,如下所示:

cont newObj = obj.tst1.split(",").map(function(value) {
    let finalObj = {}
    return finalObj = {
        id: tempObject.id,
        date: tempObject.date,
        tst1: value,
    })

现在,newObj 是一个对象数组,每个对象都包含一个值 tst1。 问题是我仍然必须为 tst2 做同样的事情......

我想知道是否有更简单的方法来做到这一点......

谢谢!

【问题讨论】:

    标签: javascript javascript-objects


    【解决方案1】:

    不确定这是否是您要搜索的内容,但我尝试更广泛地使用您尝试做的事情:

    const duplicateProperties = obj => {
      const properties = Object.entries(obj);
      return properties.reduce((acc, [key, value]) => {
        if (typeof value === 'string' && value.includes(',')) {
          const values = value.split(',');
          values.forEach((v, i) => {
            if (!acc[i]) {
              acc[i] = {};
            }
            acc[i][key] = v.trim();
          });
        } else {
          acc.forEach(o => o[key] = value);
        }
        return acc;
      }, []);
    };

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多