【问题标题】:How to build out this complex Array based on this Simple Object如何基于这个简单对象构建这个复杂的数组
【发布时间】:2015-06-18 20:41:35
【问题描述】:

http://jsfiddle.net/leongaban/tuhgns3q/

我的简单对象:

{
    portfolio: "AAPL",
    t1_tag1: "1111",
    t2_tag1: "2222",
    t3_tag1: "3333",
    ticker1: "AA",
    ticker2: "GOOG",
    ticker3: "AAPL"
}

期望的最终结果如下。包含对象数组的对象数组:

[
    0:Object {
        tags: [
            0:Object {
                t1_tag1: "1111"
            }
        ]
        ticker: ticker1
    },
    1:Object {
        tags: [
            0:Object {
                t2_tag2: "2222"
            }
        ]
        ticker: ticker2
    },
    3:Object {
        tags: [
            0:Object {
                t3_tag3: "3333"
            }
        ]
        ticker: ticker3
    }
]

有没有更简单的方法可以通过 _lodash 实现这一目标?

【问题讨论】:

  • 所以你只是丢弃portfolio属性?
  • 您希望对输入的哪一部分数据进行分组?在最后一个字符上,在这种情况下是一个数字?所以问题中的输入对象必须更新,因为它包含3x tag1,但输出不同。
  • @dsuess 是的,所以如果有ticker3,那么所有以t3_开头的标签都需要分组到ticker3对象内部的tags数组中。如果我以不同的方式重命名密钥会有帮助吗?例如t1_ticker1 & t1_tag1t3_ticker3 & t3_tag1

标签: javascript arrays object lodash


【解决方案1】:

这是我只使用普通 JavaScript 而不使用 lodash 或下划线的结果:

function expand(simple) {
    var outerArray = [], innerArray,
        outerIndex = 1, innerIndex,
        outerObject, innerObject;

    while (("ticker" + outerIndex) in simple) {
        innerArray = [];
        innerIndex = 1;

        while (("t" + outerIndex + "_tag" + innerIndex) in simple) {
            innerObject = {};

            innerObject["t" + outerIndex + "_tag" + innerIndex] = simple["t" + outerIndex + "_tag" + innerIndex];
            innerArray.push(innerObject);

            innerIndex++;
        }

        outerObject = {
            tags: innerArray,
            ticker: simple["ticker" + outerIndex]
        };

        outerArray.push(outerObject);

        outerIndex++;
    }

    return outerArray;
}

console.log(expand({
    portfolio: "AAPL",
    t1_tag1: "1111",
    t2_tag1: "2222",
    t3_tag1: "3333",
    ticker1: "AA",
    ticker2: "GOOG",
    ticker3: "AAPL"
}));

【讨论】:

  • 漂亮!没想到使用while 循环,其实我从来没有!谢谢! :D 通读一遍,明白了……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多