我们说我有一个像这样的数组:
[
{ product: '...', price: 12 },
{ product: '...', price: 12 },
{ product: '...', price: 14 },
{ product: '...', price: 12 }
]
我想按价格对这个数组进行分组,并使用lodash' groupBy
我得到以下结果:
[
12: [
{ product: '...', price: 12 },
{ product: '...', price: 12 },
{ product: '...', price: 12 }
],
14: [
{ product: '...', price: 14 }
]
]
很好,但是我想要一个包含三个数组的数组,因为我想保存某些类似于start数组的顺序。我希望得到这样的结果:
[
[
{ product: '...', price: 12 },
{ product: '...', price: 12 }
],
[
{ product: '...', price: 14 }
],
[
{ product: '...', price: 12 }
]
]
这是否有功能?
答案 0 :(得分:2)
您可以使用lodash -
执行此类操作var count = 0;
console.log(
_.values(_.groupBy(_.map(myArray, (item, index) => {
if(index == 0) return _.merge(item, { group : 0});;
if( myArray[index-1].price == item.price )
return _.merge(item, { group : count});
return _.merge(item, { group : ++count});
}
), 'group'))
);
在此处试试 - lodash-group-consequtive
答案 1 :(得分:1)
使用普通js,您可以使用forEach()
循环执行此操作,并在变量中保存最后一个价格,以检查最后插入的元素是否与当前元素具有相同的价格。
var data = [
{ product: '...', price: 12 },
{ product: '...', price: 12 },
{ product: '...', price: 14 },
{ product: '...', price: 12 }
]
var result = [], last = null
data.forEach(function(e, i) {
if(!this[e.price]) {
this[e.price] = [e];
result.push(this[e.price])
} else {
this[e.price].push(e)
}
if(last != e.price && i != 0) delete this[last]
last = e.price
}, {})
console.log(result)

答案 2 :(得分:1)
也许这段代码对您有所帮助:
var myArray = [
{ product: '...', price: 12 },
{ product: '...', price: 12 },
{ product: '...', price: 14 },
{ product: '...', price: 12 }
]
var newArray = _.map(_.keyBy(myArray, "price"))
console.log(newArray)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
答案 3 :(得分:1)
您可以检查最后插入的数组并使用实际价格测试第一个项目。如果匹配,则推送到最后一个数组,否则将新数组推送到结果集。
var data = [{ product: '...', price: 12 }, { product: '...', price: 12 }, { product: '...', price: 14 }, { product: '...', price: 12 }],
result = data.reduce(function (r, a) {
var last = r[r.length - 1] || [{}];
if (last[0].price === a.price) {
last.push(a);
} else {
r.push([a]);
}
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }