如何获取元素为对象的多维数组的列数?
解决对象数组的“列数”获取问题
嘿,我懂你遇到的困惑啦!你这里的结构其实不是传统意义上的二维数组,而是一个包含多个数字键对象的数组——这就是为什么x[0].length返回undefined的核心原因:x[0]是个对象,不是数组,对象本身没有.length属性哦。
先理清楚你的数据结构
你给出的数组展开后是这样的:
const x = [ {0: "1", 1: "2", 2: "3", 3: "4 "}, {0: "5", 1: "6", 2: "7", 3: "8 "}, {0: "9", 1: "10", 2: "11", 3: "12 "} ];
x.length返回3是完全正确的,因为外层是一个包含3个元素的数组。- 但每个元素都是独立的对象,不是数组,所以直接调用
.length自然得不到你想要的“列数”。
获取“列数”的几种实用方法
方法1:直接取第一个对象的键数量(适用于所有对象结构一致的场景)
如果能确定数组里每个对象的键数量都相同,直接用Object.keys()获取对象的键数组,再取长度就能得到结果:
const columnCount = Object.keys(x[0]).length; console.log(columnCount); // 输出4,就是你想要的“列数”
Object.keys()会返回对象自身所有可枚举键组成的数组,刚好对应你需要的列数。
方法2:遍历数组,处理对象结构不一致的情况
如果不确定每个对象的键数量都一致(比如有的对象可能多/少几个键),可以遍历数组找出最大的键数量:
let maxColumnCount = 0; x.forEach(item => { const currentCount = Object.keys(item).length; if (currentCount > maxColumnCount) { maxColumnCount = currentCount; } }); console.log(maxColumnCount); // 输出所有对象中最多的键数量
方法3:改成真正的二维数组(如果这是你的初衷)
如果你本来想创建的是二维数组,那把每个元素改成数组就可以直接用.length了:
const x = [ ["1", "2", "3", "4 "], ["5", "6", "7", "8 "], ["9", "10", "11", "12 "] ]; console.log(x.length); // 行数3 console.log(x[0].length); // 列数4,完美符合你的需求
小补充
如果你的对象里有继承来的可枚举属性(不过你的场景里应该没有),可以用Object.getOwnPropertyNames()代替Object.keys(),它会返回对象自身所有属性(包括不可枚举的)的键数组,但一般Object.keys()就足够解决你的问题啦。
内容的提问来源于stack exchange,提问作者smolo
相关产品推荐
相关产品推荐

