【问题标题】:Convert object into array object but reduce down by key name character number将对象转换为数组对象,但按键名字符数减少
【发布时间】:2020-08-13 06:01:26
【问题描述】:

我有这个对象:

{
mainTitle: "xx",
press1: {text: "xx", linkUrl: "xx", linkText: "xx"}
press1imgs: [{…}, {…}]
press2: {text: "xx", linkUrl: "xx", linkText: "xx"}
press2imgs: [{…}, {…}]
press3: {text: "xx", linkUrl: "xx", linkText: "xx"}
press3imgs: [{…}, {…}]
press4: {text: "xx", linkUrl: "xx", linkText: "xx"}
press4imgs: [{…}, {…}]
press5: {text: "xx", linkUrl: "xx", linkText: "xx"}
press5imgs: [{…}, {…}]
press6: {text: "xx", linkUrl: "xx", linkText: "xx"}
press6imgs: [{…}, {…}]
}

我想将其缩减为一个数组,但将所有 press1, press1imgs, press2, press2Imgs 放在同一个索引中。如果按下后的数字相同,则放入同一个索引中,总共有6个索引,如下:

[
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
]

我能够将对象转换为数组并从pressx 获取数字,但是我迷失了如何继续使用reduce、filter、map?我的尝试:

 const mapped = Object.keys(this.content).map((key) => ({
    key: key,
    value: this.content[key],
  }));

  console.log(mapped);
  mapped.map((item) => {
    console.log(item.key.charAt(5));
    if (item.key.charAt(5)){

    }
  });

【问题讨论】:

    标签: javascript angular typescript filter reduce


    【解决方案1】:

    因为键是非常动态的,所以我怀疑数组方法在这里是否是一个不错的选择。我会使用循环:

    const input = this.content;
    const results = [];
    let i = 1;
    while (input.hasOwnProperty('press' + i)) {
      results.push({
        ...input['press' + i],
        img: input['press' + i + 'imgs'],
      });
      i++;
    }
    

    直播sn-p:

    const input = {
    mainTitle: "xx",
    press1: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press1imgs: [{}, {}],
    press2: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press2imgs: [{}, {}],
    press3: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press3imgs: [{}, {}],
    press4: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press4imgs: [{}, {}],
    press5: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press5imgs: [{}, {}],
    press6: {text: "xx", linkUrl: "xx", linkText: "xx"},
    press6imgs: [{}, {}]
    }
    
    const results = [];
    let i = 1;
    while (input.hasOwnProperty('press' + i)) {
      results.push({
        ...input['press' + i],
        img: input['press' + i + 'imgs'],
      });
      i++;
    }
    console.log(results);

    【讨论】:

    • 这可行,但原始对象可能并不总是按顺序返回键,所以我希望使用 charAt(5) 方法。
    • 即使对象是用键 5、1、3、4、2 排序的,它应该可以正常工作 - 答案中代码中的 i 无论如何都会从 1 递增, 并按下存在的键。
    猜你喜欢
    • 2018-10-20
    • 2022-11-10
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2017-08-17
    • 2021-10-14
    • 2012-05-08
    相关资源
    最近更新 更多