javascript-按项目的元素值分割数组的最佳性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-按项目的元素值分割数组的最佳性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1633字,纯文字阅读大概需要3分钟。
内容图文
![javascript-按项目的元素值分割数组的最佳性能](/upload/InfoBanner/zyjiaocheng/687/d2ffe45369484cae8f276922218b6754.jpg)
我有很多这样的东西
var array = [
{ id: 1, category: 'Apple' },
{ id: 2, category: 'Orange' },
{ id: 3, category: 'Orange' },
{ id: 4, category: 'Grape' },
{ id: 5, category: 'Grape' },
]
我想按元素的值将项目拆分为这样的东西
var newArray = [
[
{ id: 1, category: 'Apple' },
],
[
{ id: 2, category: 'Orange' },
{ id: 3, category: 'Orange' },
],
[
{ id: 4, category: 'Grape' },
{ id: 5, category: 'Grape' },
],
]
这是我目前使用的:
var array = [
{ id: 1, category: 'Apple' },
{ id: 2, category: 'Orange' },
{ id: 3, category: 'Orange' },
{ id: 4, category: 'Grape' },
{ id: 5, category: 'Grape' }
];
var categories = [];
array.forEach(function(item) {
categories.push(item.category);
});
var uniqueCategories = categories.filter(function(item, pos) {
return categories.indexOf(item) == pos;
});
var newArray = []
uniqueCategories.forEach(function(category, index) {
array.forEach(function(item) {
if (item.category === category) {
if (!newArray[index]) {
newArray[index] = [];
}
newArray[index].push(item);
}
});
});
但是,当大型数组包含1000-10000个项目时,它的速度非常慢.
达到最佳效果的最佳方法是什么?
解决方法:
这就是我要怎么做.我首先将数组简化为一棵树(一个对象),其键为类别.插入和访问对象的复杂度应为O(log n),但是JavaScript语言规范并未规定这些函数的时间复杂度.
然后,从那棵树中进行迭代,以获取每个键的值并将其推入数组.
const array = [
{ id: 1, category: 'Apple' },
{ id: 2, category: 'Orange' },
{ id: 3, category: 'Orange' },
{ id: 4, category: 'Grape' },
{ id: 5, category: 'Grape' },
];
const result = Object.values(array.reduce((accum, { id, category }) => {
accum[category] = accum[category] || [];
accum[category].push({ id, category });
return accum;
}, {}));
console.log(result);
内容总结
以上是互联网集市为您收集整理的javascript-按项目的元素值分割数组的最佳性能全部内容,希望文章能够帮你解决javascript-按项目的元素值分割数组的最佳性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。