假设我有一个这样的数组:
var arr = [
{type:"orange", title:"First"},
{type:"orange", title:"Second"},
{type:"banana", title:"Third"},
{type:"banana", title:"Fourth"}
];
我希望将其拆分成数组,这些数组具有相同类型的对象,因此:
[{type:"orange", title:"First"},
{type:"orange", title:"Second"}]
[{type:"banana", title:"Third"},
{type:"banana", title:"Fourth"}]
但我想笼统地这样做,这样就不会有指定橙色或香蕉的if语句
// not like this
for (prop in arr){
if (arr[prop] === "banana"){
//add to new array
}
}
有什么想法吗?JQuery和下划线都是可以使用的选项。
9条答案
按热度按时间n6lpvg4x1#
对于
Array.reduce(...)
来说,这是一项简单的工作:当然,如果您的目标浏览器不支持ECMASSCRIPT 262第5版,那么您将不得不自己实现“Reduce”,或者使用多边形填充库,或者选择其他答案。
**[更新]**以下是一个适用于任何版本的JavaScript的解决方案:
6za6bjd02#
JQuery和下划线都是可以使用的选项。
下划线的
groupBy
完全符合您的需要。sd2nnvve3#
这里假设有一个对象数组:
slwdgvem4#
ES6解决方案:
或完全ES6fy:
我希望它能帮上忙!
23c0lvtd5#
只需构建一个词典,根据对象的标题保存这些对象。您可以这样做:
JS
Jsfiddle演示:http://jsfiddle.net/YJnM6/
mfpqipee6#
打字稿版本。
k7fdbhmy7#
对于一个示例,如果我们不想提到类型,那么我们可以这样实现
uyto3xhc8#
您还可以使用https://lodash.com/docs/4.17.15#groupBy
它会满足你的目的
vaqhlq819#
对@Watchaker的回答稍作调整,以返回数组而不是对象。