我的问题是我有一些代码来检查数组是否是多维的。
if( typeof( ary[ 0 ][ 0 ] ) != 'undefined' )
{
alert( "this array is 2 dimensional" );
}
else
{
alert( "this array is not 2 dimensional" )
}
这适用于仅包含数字的数组。但是当我的数组充满了像
这样的字符串时var ary = [ "one", "two", "three" ];
JavaScript似乎使这个数组具有固有的多维性。我可以通过以下方式访问每个字母:
alert( ary[ 0 ][ 0 ] );//This returns the letter "o" from "one"
问题是typeof
的{{1}}未定义,但它是一个字符串。那么如果我的数组不是真正的二维,我如何才能使这个返回未定义?是的我是新手和thx。
答案 0 :(得分:3)
有没有办法防止字符串表现得像多维数组?
你不能改变字符串的行为,不,但该测试也可以解决其他问题。例如,它会说这是一个二维数组:
var obj = {0: {0: "foo"}}; // Yes, that's valid syntax. Rare, but valid.
相反,请考虑Array.isArray
:
if (Array.isArray(ary) && Array.isArray(ary[0]))
{
alert( "this array is 2 dimensional" );
}
else
{
alert( "this array is not 2 dimensional" )
}
在ES5中添加了 Array.isArray
,但对于真正的旧引擎可以轻松填充:
if (!Array.isArray) {
(function() {
var toString = Object.prototype.toString;
Array.isArray = function(arg) {
return toString.call(arg) === "[object Array]";
};
})();
}
旁注:JavaScript没有拥有多维数组。它有数组,可以包含其他数组。仅仅因为索引0
处的数组并不意味着索引1
处有一个数组。
答案 1 :(得分:3)
使用Array.isArray
来检查对象是否是多维数组:
if (Array.isArray(ary) && Array.isArray(ary[0])) { ... }
请注意,Array.isArray
是ES5的补充,但如果您需要支持旧浏览器,则jQuery具有$.isArray
,而lodash / underscore.js具有_.isArray
。如果你没有使用其中任何一种,MDN有以下polyfill:
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
答案 2 :(得分:0)
你也可以使用像lodash这样的库。
检查此功能https://lodash.com/docs#isArray
E.g。
if (_.isArray(ary) && _.isArray(ary[0]))
{
alert( "this array is 2 dimensional" );
}
else
{
alert( "this array is not 2 dimensional" )
}