【问题标题】:How to move object data to be in an index if there is only 1 set of data in the object? JavaScript如果对象中只有一组数据,如何将对象数据移动到索引中? JavaScript
【发布时间】:2021-08-10 18:14:24
【问题描述】:

我对 JS 编码和一般编码都很陌生,我希望能得到一些帮助。这个问题的措辞也可能是错误的。我已经尝试寻找答案,但我不确定问题的确切措辞,所以我找不到答案,抱歉。

问题:

我有一个对象,里面有很多数据。每个索引都是一个 idNumber,每个 idNumber 内部是有关该 idNumber 的阻止日期的信息以及特定于该 idNumber 的其他信息块。

问题是如果只有1个block date的数据,idNumber里面的数据没有被索引,而是直接放在object里面。

这是当前结构的图片:

“328029”的顶部id号是正确的。 “328033”下面的idNumber只有1个block date,所以信息没有被索引到“0”。

这就是我想要的样子:

我的问题是如何将 idNumber 中的数据推送到它自己的索引“0”中?

如果这令人困惑并且写得不好,再次抱歉。感谢您的帮助!

【问题讨论】:

    标签: javascript arrays object indexing


    【解决方案1】:

    使用Object.entriesObject.fromEntriesarray#map

    • 将对象转换为数组
    • 遍历每个 [key, value] 数组对
    • 如果 value 子对象未编入索引,则返回编入索引的版本。

    完整代码:

    // Rough representation of your data
    let data = {
        key1: {
            0: { "": 12, "...": 123 },
            1: { "": 12, "...": 123 },
            2: { "": 12, "...": 123 },
        },
        key2: {
            0: { "": 12, "...": 123 },
            1: { "": 12, "...": 123 },
            2: { "": 12, "...": 123 },
        },
        key3: { "": 12, "...": 123 },
    };
    
    let result = 
        Object.fromEntries(Object.entries(data).map(([key, value]) => value["0"] ? [key, value] : [key, {0: value}]))
    
    console.log(result)

    关于您的评论:

    • 我们必须在外部对象和子对象上都使用Object.entries,这意味着这个解决方案会更长更冗长。
    • keysToKeepOutside 包含在您的情况下不应移动的键列表,您应将其设置为 ["UnitInfo", "UnitSeasonInfo"]

    完整代码:

    let data = {
        key1: {
            0: { "": 12, "...": 123 },
            1: { "": 12, "...": 123 },
            2: { "": 12, "...": 123 },
        },
        key2: {
            0: { "": 12, "...": 123 },
            1: { "": 12, "...": 123 },
            2: { "": 12, "...": 123 },
        },
        key3: { stayOutside: "don't move me", "": 12, "...": 123 },
    };
    
    let keysToKeepOutside = ["stayOutside"];
    
    let result = Object.fromEntries(
        Object.entries(data).map(([key, value]) => {
            if (value["0"]) return [key, value];
    
            let inside = {}, outside = {};
    
            for (let key in value) {
                keysToKeepOutside.includes(key)
                    ? (outside[key] = value[key])
                    : (inside[key] = value[key]);
            }
    
            return [key, { 0: inside, ...outside }];
        })
    );
    
    console.log(result);

    【讨论】:

    • 这对我来说几乎是完美的,唯一的问题是我需要“UnitInfo”和“UnitSeasonInfo”来保持在索引数据之外。这是您的代码的样子:[在您的代码运行之后][1] 有没有办法做同样的事情,但忽略“UnitInfo”和“UnitSeasonInfo”索引?谢谢您的帮助! [1]:i.stack.imgur.com/2C0v1.png
    • @RSGuy 是的,我已经在Regarding your comment 部分下对我的帖子进行了编辑。另请注意包含要保留在外部的键的新数组。
    【解决方案2】:

    你可以试试这样的:

    const modifyObject = obj =>
      Object.keys(obj).forEach(key => {
        if (obj[key].confirmation_id) obj[key] = { 0: obj[key] }
      })
    
    const myObj = {...}
    
    let myModObj = modifyObject(myObj)
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2018-07-31
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2022-11-17
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多