如何创建每个元素为对象对的JavaScript数组?
解决数组元素配对并推入数组的问题
我来帮你梳理下问题并修正代码~首先看你遇到的几个核心问题:
1. 变量命名不合法
JavaScript里变量名不能以数字开头,所以1Arr、1ArrPair这种命名会直接触发语法错误,得改成合法的名字,比如inputArr、arrPairs。
2. 数组推入的写法错误
你要推入的是「对象对」,本质是包含两个元素的子数组,必须用push([inputArr[i], inputArr[j]])这种形式——把两个元素包裹在数组里再推入。你之前写的push(1Arr[i] 1Arr[j])既缺逗号又没包裹数组,肯定无法正常工作。
3. 循环逻辑与条件问题
- 外层循环条件
i < 1Arr.length会导致最后一次循环时,j = i+1超出数组长度,取到undefined,所以应该改成i < inputArr.length - 1,确保每次都能取到有效的相邻元素。 - 内层循环里的
break完全没必要,因为你本来就只需要取j = i+1这一个值,直接去掉内层循环,在每次外层循环里处理i和i+1的配对即可。 - 初始判断条件
if (1Arr != undefined || 1Arr!=null)有逻辑漏洞,应该用&&,或者更简洁的if (inputArr && inputArr.length > 0),避免数组为null/undefined时访问length报错。
修正后的代码
假设你想要的是相邻元素两两配对(比如[book[0], book[1]], [book[1], book[2]], ...),修正后的函数如下:
buildArrPairs(inputArr) { // 先初始化存储配对的数组,避免未定义报错 this.arrPairs = []; // 安全判断:数组存在且长度至少为2才继续 if (inputArr && inputArr.length >= 2) { for (let i = 0; i < inputArr.length - 1; i++) { // 将相邻的两个元素组成子数组推入 this.arrPairs.push([inputArr[i], inputArr[i + 1]]); } } return this.arrPairs; }
如果你的需求是所有不重复的两两组合(比如[book[0],book[1]], [book[0],book[2]], [book[1],book[2]]...),那可以保留内层循环并去掉break,调整后的代码:
buildAllPairs(inputArr) { this.allPairs = []; if (inputArr && inputArr.length >= 2) { for (let i = 0; i < inputArr.length; i++) { for (let j = i + 1; j < inputArr.length; j++) { this.allPairs.push([inputArr[i], inputArr[j]]); } } } return this.allPairs; }
测试示例
比如你有书籍数组:
const books = [{name: 'Book1'}, {name: 'Book2'}, {name: 'Book3'}]; // 调用相邻配对函数 buildArrPairs(books); // 结果会是:[[{name: 'Book1'}, {name: 'Book2'}], [{name: 'Book2'}, {name: 'Book3'}]]
这样就能正常生成你需要的对象对数组啦~
内容的提问来源于stack exchange,提问作者user3035279
相关产品推荐
相关产品推荐

