const arr = [ { name: 'apple', shouzimu: 'a' }, { name: 'banana', shouzimu: 'b' }, { name: 'avocado', shouzimu: 'a' }, { name: 'blueberry', shouzimu: 'b' }, { name: 'cherry', shouzimu: 'c' }, { name: 'coconut', shouzimu: 'c' } ]; const result = arr.reduce((acc, curr) => { const firstLetter = curr.shouzimu.toLowerCase(); // 获取对象中 shouzimu 的首字母并转为小写 if (!acc[firstLetter]) { acc[firstLetter] = []; // 如果新数组中没有这个首字母的键,则创建一个空数组 } acc[firstLetter].push(curr); // 将当前对象添加到对应首字母的数组中 return acc; }, {}); const newArray = Object.values(result); // 提取新数组中的值 console.log(newArray); new Array能不能按照 abcdefghijklmnopqrstuvwxyz 的循序 放进去
时间: 2024-01-20 15:03:16 浏览: 56
npm-namecard:npm 名片库
在 JavaScript 中,对象的属性是无序的,因此使用普通的对象(`{}`)来存储键值对时,无法保证属性的顺序。所以在使用 `reduce` 方法分类对象时,输出结果的顺序可能是不确定的。
如果你希望按照 `abcdefghijklmnopqrstuvwxyz` 的顺序将对象分类,可以使用 `Map` 数据结构来代替普通对象。`Map` 会保持插入顺序,并且可以根据键的顺序进行迭代。
以下是修改后的代码示例:
```javascript
const arr = [
{ name: 'apple', shouzimu: 'a' },
{ name: 'banana', shouzimu: 'b' },
{ name: 'avocado', shouzimu: 'a' },
{ name: 'blueberry', shouzimu: 'b' },
{ name: 'cherry', shouzimu: 'c' },
{ name: 'coconut', shouzimu: 'c' }
];
const result = arr.reduce((acc, curr) => {
const firstLetter = curr.shouzimu.toLowerCase(); // 获取对象中 shouzimu 的首字母并转为小写
if (!acc.has(firstLetter)) {
acc.set(firstLetter, []); // 如果 Map 中没有这个首字母的键,则创建一个空数组
}
acc.get(firstLetter).push(curr); // 将当前对象添加到对应首字母的数组中
return acc;
}, new Map());
const newArray = [...result.values()]; // 提取新数组中的值
console.log(newArray);
```
这段代码使用了 `Map` 来存储分类后的对象。`Map` 会按照插入顺序保持键值对,并且可以通过 `values()` 方法获取值的迭代器。在最后的 `console.log` 语句中,将迭代器转换为数组,以便打印结果。这样,打印出的数组将按照 `abcdefghijklmnopqrstuvwxyz` 的顺序进行分类。
阅读全文