如何基于这个简单对象构建这个复杂的数组

时间:2015-06-18 20:41:35

标签: javascript arrays object lodash

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 是否有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

以下是我使用vanilla 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"
}));