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

How to build out this complex Array based on this Simple Object

本文关键字:复杂 数组 构建 简单 何基于 单对象      更新时间:2023-09-26

>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来实现这一点?

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