【问题标题】:Find and Replace Value with id from one Array with another nested Array Object in TypeScript在 TypeScript 中用另一个嵌套数组对象从一个数组中查找并替换带有 id 的值
【发布时间】:2021-04-22 15:55:42
【问题描述】:

我有第一个这样的数组

[
  ["Maths", "Chemistry", "Physics"],
  ["CS", "EC"],
  ["High", "Medium", "Low", "Average", "Excellent"]
]

我还有另一个对象数组,格式如下

[
  [{
      id: 1,
      name: "Maths",
      is_active: 1
    },
    {
      id: 2,
      name: "Chemistry",
      is_active: 1
    },
    {
      id: 3,
      name: "Physics",
      is_active: 1
    },
    {
      id: 4,
      name: "Social Science",
      is_active: 1
    }
  ],
  [{
      id: 10,
      name: "CS",
      is_active: 1
    },
    {
      id: 11,
      name: "EC",
      is_active: 1
    },
    {
      id: 12,
      name: "PHY",
      is_active: 1
    },
  ],
  [{
      id: 101,
      name: "High",
      is_active: 1
    },
    {
      id: 102,
      name: "Low",
      is_active: 1
    },
    {
      id: 103,
      name: "Medium",
      is_active: 1
    },
    {
      id: 104,
      name: "Excellent",
      is_active: 1
    },
    {
      id: 105,
      name: "Average",
      is_active: 1
    },
    {
      id: 106,
      name: "Below Average",
      is_active: 1
    },
  ]
]

我需要将第一个数组值替换为 id,方法是将第一个数组中的名称与第二个数组中嵌套对象数组中的名称相匹配。 我的最终输出需要采用这种格式

[
    [1,2,3],
    [10,11],
    [101,103,102,105,104]
]

任何人都可以帮助我如何在 TypeScript 中执行此操作。

【问题讨论】:

    标签: arrays typescript object nested-object


    【解决方案1】:

    我可以建议使用 map() 和 find() 这个:

    • simpleData 是只包含名称的表格
    • fullData 是包含对象的表格

    let fullData = [
      [{
          id: 1,
          name: "Maths",
          is_active: 1
        },
        {
          id: 2,
          name: "Chemistry",
          is_active: 1
        },
        {
          id: 3,
          name: "Physics",
          is_active: 1
        },
        {
          id: 4,
          name: "Social Science",
          is_active: 1
        }
      ],
      [{
          id: 10,
          name: "CS",
          is_active: 1
        },
        {
          id: 11,
          name: "EC",
          is_active: 1
        },
        {
          id: 12,
          name: "PHY",
          is_active: 1
        },
      ],
      [{
          id: 101,
          name: "High",
          is_active: 1
        },
        {
          id: 102,
          name: "Low",
          is_active: 1
        },
        {
          id: 103,
          name: "Medium",
          is_active: 1
        },
        {
          id: 104,
          name: "Excellent",
          is_active: 1
        },
        {
          id: 105,
          name: "Average",
          is_active: 1
        },
        {
          id: 106,
          name: "Below Average",
          is_active: 1
        },
      ]
    ]
    
    let simpleData = [
      ["Maths", "Chemistry", "Physics"],
      ["CS", "EC"],
      ["High", "Medium", "Low", "Average", "Excellent"]
    ]
    
    let newIdTable = [];
    for ( let i = 0; i < fullData.length; i++ ) {
        let table = simpleData[i].map( ( name ) => {
            return fullData[i].find( item => item.name === name ).id
        } );
    
        newIdTable.push( table );
    }
    
    console.log(newIdTable)

    使用find(),如果对应的对象不存在,则返回undefined。我没有在这里测试案例,因为我认为您的对象已经存在于 fullData 表中。因此,如果需要,您必须使用条件修改代码来处理这种情况:)

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2018-02-06
      • 2018-10-27
      相关资源
      最近更新 更多