2016-09-30 28 views
1

我有像一些参数的URL这一个: http://localhost:9000/#/checkout/?title1=Sodadrink&quantity1=2&price1=129.95&title2=PolaryteGlasses&quantity2=1&price2=59.95#%2FAngularJS如何组/组织的目标项目,以显示他们在视图

,我让他们与$location.search(),刚刚返回他们罚款喜欢的对象:

Object 
    price1: "129.95" 
    price2: "59.95" 
    quantity1: "2" 
    quantity2: "1" 
    title1: "Sodastream" 
    title2: "Polaryte – Óculos de Sol" 
    __proto__: Object 

这是很酷,但现在我需要像组每个项目:

[item] 
    title : Sodastream 
    price : 129.95 
    quantity : 1 
[item] 
    title : --- 
    price : --- 
    quantity : --- 

我被困在T他的部分,我已经计算了对象内的所有项目,6,并且他们通过创建一个新的对象将它们分组为3,但是没有成功。 你能帮我吗?谢谢。

回答

1

由于在URL项目的数目可以变化,最好是不硬编码任何数。为此,我还假设每个项目都有3个属性 - 标题,价格和数量。

试试这个:

var numOfItems = Object.keys(input).length/3; // for example, 6 properties will mean 2 items 
var output = []; 
for (var i = 1; i <= numOfItems; i++) { 
    if (input["title"+i]) { 
    output.push({title: input["title"+i], price: input["price"+i],quantity: input["quantity"+i]}) 
    } 
} 

输出数组应该包含在您指定的确切方式的对象。

+0

感谢您的快速回答,事实证明我正在考虑正确的方式,就像您和Mike的解决方案。我这样计算内部物品: $ scope.basket = []; var items = $ location.search(); var count = 0; for(var k in items){ if(items.hasOwnProperty(k)){ ++ count; } } 其中计数将返回6号码。然后我做了一个循环: for(var i = 1; i

+0

我只是改变了你的代码,因为(var i = 1; i <= numOfItems; i ++) 在<运算符为<=时,否则它只会将索引1推送到Output数组。 谢谢;) –

+0

感谢您指出。干杯。 –

1

你将不得不写一点JavaScript来做到这一点。

假定从上方的对象被称为输入

const MAX_ITEMS=9; 
var outputs = []; 
for (var i=1,i<MAX_ITEMS;i++) { 
    if (inputs["item"+i]) { 
     outputs.push({item: inputs["item"+i], price: inputs["price"+i],quantity: inputs["quantity"+i]}) 
    } 
} 

你的数据将是在输出可变

+0

这基本上是你回答麦克,谢谢! ;) –