4 回答
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
TA贡献1921条经验 获得超9个赞
您可以使用简单map的方法对项目进行分组:
const array = ["electric", "fire", "flying", "electric", "water", "electric", "water", "electric", "fire", "flying", "electric", "water"];
let map = {};
for(let i = 0; i < array.length; i++){
let item = array[i];
if(!map[item])
map[item] = [ item ];
else
map[item].push(item);
}
console.log(Object.values(map));
![?](http://img1.sycdn.imooc.com/5458662500019a7c02200220-100-100.jpg)
TA贡献1865条经验 获得超7个赞
您可以使用Array#reduce一个对象来存储数组中的每个元素,从而创建一个数组数组。
const array = ["electric", "fire", "flying", "electric", "water", "electric", "water", "electric", "fire", "flying", "electric", "water"];
const res = Object.values(
array.reduce(
(acc,curr)=>((acc[curr]=acc[curr]||[]).push(curr), acc), {}
)
);
console.log(res);
![?](http://img1.sycdn.imooc.com/54584d6100015f5802200220-100-100.jpg)
TA贡献1803条经验 获得超3个赞
欢迎来到堆栈溢出。希望你喜欢这里。随意参加导览并查看如何提供最小的、可重现的示例
您可以使用数组.map()
和.filter()
方法——您真的不需要为此使用 jQuery——如下所示:
let chunks = array.map(a => array.filter(x => x === a)) .filter((item, index) => array.indexOf(item[0]) === index);
const array = ["electric", "fire", "flying", "electric", "water", "electric", "water", "electric", "fire", "flying", "electric", "water"];
let chunks = array.map(a => array.filter(x => x === a)).filter((item, i) => array.indexOf(item[0]) === i);
console.log( chunks );
![?](http://img1.sycdn.imooc.com/545847f50001126402200220-100-100.jpg)
TA贡献1775条经验 获得超8个赞
这应该工作:
const array = ["electric", "fire", "flying", "electric", "water", "electric", "water", "electric", "fire", "flying", "electric", "water"]
console.log(array.reduce((acc, el) => {
acc[el.charAt(0)] = acc[el.charAt(0)] ? [...acc[el.charAt(0)], el] : [el];
return acc
}, {}))
您reduce
是元素,然后基于以下内容构建生成的对象:
如果已经有第一个字母的条目,则推送当前元素
否则,将当前第一个字母和仅包含当前元素的数组关联到该条目
注意:你实际上可以将它减少到一个关联数组,这取决于你哪个更符合你的要求
添加回答
举报