2014-10-30 88 views
0

我的问题是合并一个对象和一个对象数组。Javascript合并对象和数组

这是我的目标:

{ 

    model1: ["model1-coupe", "model1-hatchback", "model1-cabriolet"], 
    model2: ["model2-coupe","model12-hatchback","model2-cabriolet"], 
    model3: ["model3-coupe","model4-hatchback","model4-cabriolet"] 

} 

这里是我的对象数组:

[ 
    {image: "/path/to/image/model1.jpg"}, 
    {image: "/path/to/image/model2.jpg"}, 
    {image: "/path/to/image/model3.jpg"} 
] 

我想合并他们这样的:

[ 
    { 
     image: "/path/to/image/model1.jpg", 
     model1: ["model1-coupe", "model1-hatchback", "model1-cabriolet"] 
    }, 

    { 
     image: "/path/to/image/model2.jpg", 
     model2: ["model2-coupe", "model2-hatchback", "model2-cabriolet"] 
    }, 

    { 
     image: "/path/to/image/model3.jpg", 
     model3: ["model3-coupe", "model3-hatchback", "model3-cabriolet"] 
    } 
] 

我怎么做?我可以使用JavaScript或Underscore。

在此先感谢

编辑:怎么看合并的结果实际上是:

[ 
    { 
     image: "/path/to/image/model1.jpg", 
     cars: ["model1-coupe", "model1-hatchback", "model1-cabriolet"] 
    }, 

    { 
     image: "/path/to/image/model2.jpg", 
     cars: ["model2-coupe", "model2-hatchback", "model2-cabriolet"] 
    }, 

    { 
     image: "/path/to/image/model3.jpg", 
     cars: ["model3-coupe", "model3-hatchback", "model3-cabriolet"] 
    } 
] 
+2

什么涉及该模型的形象呢?是否总是有一个图像模型,只有一个图像,不超过一个,并且它们总是以相同的顺序? – 2014-10-30 09:38:22

+0

总有一个模型的图像,它们以相同的顺序从服务中吐出 – Mauro74 2014-10-30 09:39:32

+0

由于对象属性的排序不是由标准(http: //www.ecma-international.org/ecma-262/5.1/#sec-12.6.4)。 – 1983 2014-10-30 10:33:07

回答

1
for (var i = 0, key; i < modelArray.length; i++) { 
    modelArray[i].cars = modelObject[Object.keys(modelObject)[i]]; 
} 

这将循环数组和属性添加到该对象。这假定对象属性都是按照正确的顺序。

在每次迭代中,它循环使用哪个属性,使用Object.keys()。然后,它将该数组中的对象的键设置为模型对象的该属性。

0

你可以做这样的事情

var models = { 
 

 
    model1: ["model1-coupe", "model1-hatchback", "model1-cabriolet"], 
 
    model2: ["model2-coupe", "model12-hatchback", "model2-cabriolet"], 
 
    model3: ["model3-coupe", "model4-hatchback", "model4-cabriolet"] 
 

 
} 
 

 

 
var images = [{ 
 
    image: "/path/to/image/model1.jpg" 
 
}, { 
 
    image: "/path/to/image/model2.jpg" 
 
}, { 
 
    image: "/path/to/image/model3.jpg" 
 
}] 
 

 

 
for (var key in models) { 
 
    if (models.hasOwnProperty(key)) { 
 
    var idx = +key.match(/\d+$/)[0] - 1; 
 
    images[idx][key] = models[key] 
 
    } 
 
} 
 

 
console.log(images)

0

尝试这样的事:

var result = []; 

var models = { 
    // your models object 
} 
var images = [ 
    // your images array 
]; 

for(var i=0, key in models) { 
    var model = models[key]; 
    var image = images[i++]; 
    result.push({ image: image, model: model }); 
}