如何重新格式化这个javascript数组?

时间:2015-06-29 14:36:17

标签: javascript arrays

我有这样的变量

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};
        }
那个工作,抱歉我该死的问题,我觉得我太困了,大家好^ _ ^

3 个答案:

答案 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;
}, {});