You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用.length正确获取嵌套数组长度?避免误取字符串长度

搞定嵌套数组长度获取的问题

嘿,先给你纠正一个小误解:在你给出的示例数组里,array[0].var本身就是数组,不管它里面装1个还是N个元素,调用.length得到的都是数组的元素个数,绝对不会是单个字符串的长度。比如你试这段代码:

const array = [ { var: [ 'hello' ], bar: [ 'asd' ] } ];
console.log(array[0].var.length); // 输出 1,不是 'hello' 的长度 5

那你说的“数组仅含一个元素时会计算字符串长度”的情况,大概率是某个环节出问题了——比如你的var在某些场景下不是数组,被意外转成了字符串(比如后端返回数据时,单个元素没包裹成数组,或者前端处理时不小心把数组拆成了字符串)。

怎么解决?给你几个实用方案:

  • 从源头保证数据类型:不管元素多少,都让varbar保持数组格式。哪怕只有一个元素,也要写成['单个元素'],而不是直接写字符串。这是最根本的解决办法。
  • 先做类型检查再获取长度:如果没法保证数据来源的格式,可以先判断是不是数组,再处理:
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

火山引擎 最新活动