gpt4 book ai didi

javascript - 基于它的元素改进数组划分

转载 作者:行者123 更新时间:2023-11-30 11:18:46 25 4
gpt4 key购买 nike

我想根据它的元素将一个数组分成两个数组例如,如果我有这个数组作为输入

[{id:1,name:"item1_g1"},{id:2,name:"item2_g2"},{id:3,name:"item3_g1"},{id:2,name:"item4_g2"}]

输出应该是这样的两个数组

第一个数组:

[{id:1,name:"item1_g1"},{id:3,name:"item3_g1"}]

第二个数组:

[{id:2,name:"item2_g2"},{id:2,name:"item4_g2"}]

和你一样,我只需要根据元素的属性 name 对元素进行分组

我正在使用 angularjs 并且我已经尝试过这段代码

var values = [{
id: 1,
name: "item1_g1"
}, {
id: 2,
name: "item2_g2"
}, {
id: 3,
name: "item3_g1"
}, {
id: 2,
name: "item4_g2"
}];
var group1 = values.filter(function(item) {
return (item.name.includes('g1'));
});
var group2 = values.filter(function(item) {
return (item.name.includes('g2'));
});
console.log(group1, group2)

但我不喜欢这个解决方案,因为如果我有一个很重的数组,那么我需要循环 n 次才能提取 n 个数组,这对性能不利

有没有办法在一个循环中完成所有这些?

最佳答案

仅遍历数组一次,使用条件来决定应将项目放入哪个数组。例如:

var values = [
{ id: 1, name: "item1_g1" },
{ id: 2, name: "item2_g2" },
{ id: 3, name: "item3_g1" },
{ id: 2, name: "item4_g2" }
];

const [group1, group2] = values.reduce((groups, el) => {
groups[1^el.name.includes('g1')].push(el);
return groups;
}, [[], []]);

console.log(group1, group2);

您可以创建一个更通用的分组函数,它采用两个参数 - 要排序的项目数组和谓词函数(返回索引)。不过,这会有点罗嗦:

function groupBy(arr, indexer) {
return arr.reduce((groups, el) => {
const index = indexer(el);
groups[index] = groups[index] || [];
groups[index].push(el);
return groups;
}, []);
}

关于javascript - 基于它的元素改进数组划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50602237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com