我有这样的变量
var item = [
{'id': '1', 'quantity': '100'},
{'id': '2', 'quantity': '200'}
];
但我需要改变这种格式
var new_item = {
'1': {'quantity': '100'},
'2': {'quantity': '200'}
};
我像这样循环,但错误
for(i=0; i<item.length; i++){
new_item = {
item[i].id: {'quantity': item[i].quantity}
};
}
如何更改此格式T__T
UPDATE FIX:
哦,是的,我只需要像这样改变
for(i=0; i<item.length; i++){
new_item[item[i].id] = {'quantity': item[i].quantity};
}
那个工作,抱歉我该死的问题,我觉得我太困了,大家好^ _ ^
答案 0 :(得分:2)
您需要使用括号表示法来设置派生键。首先初始化new_item = {}
。
new_item[item[i].id] = {quantity: item[i].quantity}
请注意,如果您使用的是ECMAScript6,则可以像这样使用computed property names in object initializers;
new_item = {
[item[i].id]: {quantity: item[i].quantity}
}
然而,每次都会覆盖new_item
,因此它最终只会拥有数组的最后一个值。
答案 1 :(得分:1)
vec2 Warp(vec2 Tex)
{
vec2 newPos = Tex;
float c = -81.0/20.0;
float u = Tex.x * 2.0 - 1.0;
float v = Tex.y * 2.0 - 1.0;
newPos.x = c*u/((v*v) + c);
newPos.y = c*v/((u*u) + c);
newPos.x = (newPos.x + 1.0)*0.5;
newPos.y = (newPos.y + 1.0)*0.5;
return newPos;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
if (uv.x < 0.5)
{
uv.x = uv.x * 2.0;
fragColor = texture2D(iChannel0, Warp(uv));
}
else
{
uv.x = (uv.x - 0.5) * 2.0;
fragColor = texture2D(iChannel0, Warp(uv));
}
}
答案 2 :(得分:1)
如果您不需要IE 8支持,可以使用reduce
执行此操作:
var newItem = item.reduce(function (o, c) {
o[c.id] = c.quantity;
return o;
}, {});