JS中如何将嵌套数组的指定元素/索引复制到另一数组
问题解答
你代码的问题出在slice方法的返回值特性上:fData.slice(row, row + 1)会返回一个包含fData[row]元素的新数组,相当于你给fRetention赋值的时候多套了一层数组,才会出现嵌套问题。另外slice属于数组的非修改方法,不会改动原fData数组,如果你观察到原数组被覆盖,需要检查其他位置的赋值逻辑。
修正方案
最简单的修改方式是直接把符合条件的子数组推入目标数组,不需要手动维护计数变量:
let fRetention = []; for (var row = 0; row <= fData.length - 1; row++) { // 遍历数组内容 if (row > 0 && row < fData.length - 1) { // 校验留存条件 if (fData[row][0] == fData[row - 1][0] && fData[row][2] == fData[row - 1][2] && fData[row][1].substr(0,1) == '2' ) { // 直接将符合条件的子数组加入目标数组 fRetention.push(fData[row]); } } }
如果你后续需要修改fRetention里的子数组,又不想影响原fData的内容,可以替换成浅拷贝子数组的写法:
- 扩展运算符写法:
fRetention.push([...fData[row]]); - slice拷贝写法:
fRetention.push(fData[row].slice());
内容的提问来源于stack exchange,提问作者augustus182l
相关产品推荐
相关产品推荐

