newArr是一个数组。在JavaScript中,数组的索引是以数字作为键值的,而不是以字符串作为键值的。因此,当你尝试将item.louceng作为键值来访问newArr时,它会被转换为一个数字。在JavaScript中,数组的长度是根据最大的索引值来确定的。如果你尝试将一个大于当前最大索引值的数字作为索引来访问数组,数组的长度会自动增加,并在中间插入空值(undefined)。newArr是一个空数组,它没有任何元素,因此它的最大索引值是-1。当你尝试将item.louceng作为键值来访问newArr时,它会被转换为一个数字。如果item.louceng是一个大于-1的数字,它会被当作索引来访问newArr,并且newArr的长度会增加到item.louceng + 1,并在中间插入空值。因此,在uniqueArr.forEach循环中,当item.louceng的值为2时,newArr的长度会增加到3,并在索引1和索引2的位置插入空值。这就是为什么在循环结束后,newArr会有两个空值。请解决这个问题
时间: 2024-04-08 08:32:54 浏览: 147
非常抱歉,我之前的回答存在错误。确实,JavaScript中的数组索引是以数字为键值的,而不是以字符串为键值的。
对于你提到的问题,我们可以使用一个对象来代替数组,并使用`item.louceng`作为属性键。以下是修改后的代码:
```javascript
let uniqueArr = [
{id: "295", loudong: "3", louceng: "2", fanghao: "3-201"},
{id: "296", loudong: "3", louceng: "2", fanghao: "3-202"},
{id: "299", loudong: "3", louceng: "5A", fanghao: "3-501A"},
{id: "300", loudong: "3", louceng: "5A", fanghao: "3-502A"},
{id: "301", loudong: "3", louceng: "5", fanghao: "3-501"},
{id: "302", loudong: "3", louceng: "5", fanghao: "3-502"},
{id: "319", loudong: "3", louceng: "15A", fanghao: "3-1501A"},
{id: "320", loudong: "3", louceng: "15A", fanghao: "3-1502A"},
{id: "321", loudong: "3", louceng: "15", fanghao: "3-1501"},
{id: "322", loudong: "3", louceng: "15", fanghao: "3-1502"}
];
let newObj = {};
uniqueArr.forEach((item, index) => {
if (!newObj[item.louceng]) {
newObj[item.louceng] = [];
}
newObj[item.louceng].push(uniqueArr[index]);
});
console.log(newObj);
```
通过使用一个对象 `newObj`,我们可以将 `item.louceng` 作为属性键,而不是数组的索引。这样,我们就可以正确地按原数组的索引顺序排列新数组。你可以在控制台中查看 `newObj` 的输出结果。非常抱歉之前的错误造成的困扰!
阅读全文