Javascript 将数组格式化为新数组

Javascript 将数组格式化为新数组,javascript,jquery,json,underscore.js,Javascript,Jquery,Json,Underscore.js,我有一个对象数组。我想重新格式化为一个新数组,但不知道如何开始。我有jQuery和下划线可用 这是我的原始阵列: var myArray = [ { "name": "Product", "value": "Car" }, { "name": "Product", "value": "Boat" }, { "name": "Product", "value": "Truck" }, { "name": "Colo

我有一个对象数组。我想重新格式化为一个新数组,但不知道如何开始。我有jQuery和下划线可用

这是我的原始阵列:

var myArray = [
  {
    "name": "Product",
    "value": "Car"
  },
  {
    "name": "Product",
    "value": "Boat"
  },
  {
    "name": "Product",
    "value": "Truck"
  },
  {
    "name": "Color",
    "value": "Blue"
  },
  {
    "name": "Location",
    "value": "Store"
  }
];
以下是我试图使新阵列看起来的样子:

var newArray = [
  {
    "name": "Product",
    "value": "Car Boat Truck"
  },
  {
    "name": "Color",
    "value": "Blue"
  },
  {
    "name": "Location",
    "value": "Store"
  }
];
在newArray中,产品都在一个对象中。

您可以使用该方法将具有相同名称的所有元素组合在一起,然后将它们转换为所需的内容。在这里,组合输出数组中的值很有用

以下是快速、简单的解决方案:

var newArray = _.chain(myArray)
                .groupBy("name")
                .map(function(a) { 
                    return { 
                        "name": a[0].name, 
                        "value":  _.pluck(a, "value").join(" ")
                    };
                })
                .value();

为了完整起见,这里是非链接版本:

var newArray = _.map(_.groupBy(myArray, "name"), function(a) { 
                    return { 
                        "name": a[0].name, 
                        "value":  _.pluck(a, "value").join(" ")
                    };
                });
可以使用该方法将具有相同名称的所有元素组合在一起,然后将它们转换为所需的内容。在这里,组合输出数组中的值很有用

以下是快速、简单的解决方案:

var newArray = _.chain(myArray)
                .groupBy("name")
                .map(function(a) { 
                    return { 
                        "name": a[0].name, 
                        "value":  _.pluck(a, "value").join(" ")
                    };
                })
                .value();

为了完整起见,这里是非链接版本:

var newArray = _.map(_.groupBy(myArray, "name"), function(a) { 
                    return { 
                        "name": a[0].name, 
                        "value":  _.pluck(a, "value").join(" ")
                    };
                });

这里有一个更通用的解决方案,它是可重用的,而不是硬编码的。通过这种方式,您可以为不同对象集合的不同属性创建多个groupBy方法,然后加入所需的属性


这里有一个更通用的解决方案,它是可重用的,而不是硬编码的。通过这种方式,您可以为不同对象集合的不同属性创建多个groupBy方法,然后加入所需的属性


很好,我这里有一个有效的解决方案。我只是想改进一下。就拿我的解决方案来说,不要使用数组,而是把数组转换成字符串,你就可以得到你想要的了。好吧,你开始编码了吗?两个人在一个小时内基本上要求相同的东西。。家庭作业?也看看:@aldux,我这里有一把小提琴,我在尼斯,我这里有一个工作的解决方案。我只是想改进一下。就拿我的解决方案来说,不要使用数组,而是把数组转换成字符串,你就可以得到你想要的了。好吧,你开始编码了吗?两个人在一个小时内基本上要求相同的东西。。作业?也看看这个:@aldux,我这里有一把小提琴,我在哪里谢谢你!我原以为这是下划线非常擅长的事情,但我刚刚开始尝试学习它。我甚至还没有见过.chain()方法。@Mdd很高兴我能帮上忙。基本上只是一种更优雅地组合下划线方法的方法。请参阅我的更新答案,了解等效的非链接解决方案。这可能会帮助您了解它是如何工作的。谢谢!我原以为这是下划线非常擅长的事情,但我刚刚开始尝试学习它。我甚至还没有见过.chain()方法。@Mdd很高兴我能帮上忙。基本上只是一种更优雅地组合下划线方法的方法。请参阅我的更新答案,了解等效的非链接解决方案。这可能会帮助你理解它是如何工作的。这真是太棒了!有趣的是,我们正在调查同样的情况真是太棒了!有趣的是,我们正在调查同样的情况