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