如何使用.length正确获取嵌套数组长度?避免误取字符串长度
搞定嵌套数组长度获取的问题
嘿,先给你纠正一个小误解:在你给出的示例数组里,array[0].var本身就是数组,不管它里面装1个还是N个元素,调用.length得到的都是数组的元素个数,绝对不会是单个字符串的长度。比如你试这段代码:
const array = [ { var: [ 'hello' ], bar: [ 'asd' ] } ]; console.log(array[0].var.length); // 输出 1,不是 'hello' 的长度 5
那你说的“数组仅含一个元素时会计算字符串长度”的情况,大概率是某个环节出问题了——比如你的var在某些场景下不是数组,被意外转成了字符串(比如后端返回数据时,单个元素没包裹成数组,或者前端处理时不小心把数组拆成了字符串)。
怎么解决?给你几个实用方案:
- 从源头保证数据类型:不管元素多少,都让
var和bar保持数组格式。哪怕只有一个元素,也要写成['单个元素'],而不是直接写字符串。这是最根本的解决办法。 - 先做类型检查再获取长度:如果没法保证数据来源的格式,可以先判断是不是数组,再处理:
const targetArr = array[0].var; const arrLength = Array.isArray(targetArr) ? targetArr.length : (typeof targetArr === 'string' ? 1 : 0); // 这里如果是字符串,我们把它当作长度为1的数组来算,你也可以根据自己的需求调整逻辑
- 加个保险处理边界情况:如果担心
array[0]或者var不存在,可以用可选链操作符避免报错:
const safeLength = Array.isArray(array?.[0]?.var) ? array[0].var.length : 0;
再验证一遍你的示例
你可以自己跑一下这两段代码,结果都是正确的:
// 多个元素的情况 const array1 = [ { var: [ 'asd', 'a3', 'a4' ], bar: [ 'asd', 'c3', 'c4' ] } ]; console.log(array1[0].var.length); // 输出 3 // 单个元素的情况 const array2 = [ { var: [ 'only-one' ], bar: [ 'asd' ] } ]; console.log(array2[0].var.length); // 输出 1
如果还是遇到获取字符串长度的问题,建议你用console.log(Array.isArray(array[0].var))排查一下,看看这个值到底是不是数组——大概率是这里出了类型错误。
内容的提问来源于stack exchange,提问作者anaximander




