Javascript 如何为相同的键但不同的值创建单个数组
如何在具有唯一productId的NodeJ中为相同的键但不同的值创建单个数组 但是,使用相同的productId使用不同的productImage,我希望productImage应该是一个数组 对于相同的productId,productImage位于此productImage数组中Javascript 如何为相同的键但不同的值创建单个数组,javascript,arrays,node.js,json,arraylist,Javascript,Arrays,Node.js,Json,Arraylist,如何在具有唯一productId的NodeJ中为相同的键但不同的值创建单个数组 但是,使用相同的productId使用不同的productImage,我希望productImage应该是一个数组 对于相同的productId,productImage位于此productImage数组中 var data = [ { "productID":18, "productTitle":"Watch", "productImage":"1588148225540.
var data = [
{
"productID":18,
"productTitle":"Watch",
"productImage":"1588148225540.jpg"
},
{
"productID":18,
"productTitle":"Watch",
"productImage":"15881482433232.jpg"
},
{
"productID":19,
"productTitle":"Shirt",
"productImage":"1588148214343.jpg"
}
]
我的预期输出应该是:
[
{
"productID":18,
"productTitle":"Watch",
"productImage":[
"1588148225540.jpg",
"15881482433232.jpg"
]
},
{
"productID":19,
"productTitle":"Shirt",
"productImage":[
"1588148214343.jpg"
]
}
]
这里有一个答案
var data = [
{
"productID":18,
"productTitle":"Watch",
"productImage":"1588148225540.jpg"
},
{
"productID":18,
"productTitle":"Watch",
"productImage":"15881482433232.jpg"
},
{
"productID":19,
"productTitle":"Shirt",
"productImage":"1588148214343.jpg"
}
]
let output =[];
data.forEach(function(item) {
var existing = output.filter(function(v, i) {
return v.productID == item.productID;
});
if (existing.length) {
var existingIndex = output.indexOf(existing[0]);
output[existingIndex].productImage =
output[existingIndex].productImage.concat(item.productImage);
} else {
if (typeof item.productImage == 'string')
item.productImage = item.productImage;
item.productThumbImage = [item.productThumbImage];
output.push(item);
}
});
您可以使用
lodash
库中的uniqBy
函数
const result = _.uniqBy(products, 'productID');