有没有办法防止字符串像多维数组一样运行
Is there a way to prevent strings from behaving like multi-Dimensional Arrays?
我的问题是我有一些代码来检查数组是否是多维的。
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"
问题是ary[ 0 ][ 0 ]
的typeof
不是未定义的,而是一个字符串。那么,如果我的数组不是真正的二维,我如何使这个返回未定义呢?是的,我是新手,谢谢。
有没有办法防止字符串像多维数组一样运行?
你不能改变字符串的行为,不,但该测试也对其他问题开放。例如,它会说这是一个二维数组:
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" )
}
Array.isArray
是在 ES5 中添加的,但对于非常旧的引擎来说可以很容易地填充:
if (!Array.isArray) {
(function() {
var toString = Object.prototype.toString;
Array.isArray = function(arg) {
return toString.call(arg) === "[object Array]";
};
})();
}
旁注:JavaScript 没有多维数组。它有数组,可以包含其他数组。仅仅因为在索引 0
处有一个数组并不意味着在索引 1
处有一个数组。
使用 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]';
};
}
你也可以使用像lodash这样的库。
检查此功能 https://lodash.com/docs#isArray
例如
if (_.isArray(ary) && _.isArray(ary[0]))
{
alert( "this array is 2 dimensional" );
}
else
{
alert( "this array is not 2 dimensional" )
}
相关文章:
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 如何在javascript中在运行时获取对象/数组
- 如何使用javascript或jquery来运行放置在数组中的函数
- 嗨,我正试图将我的movieprice数组从复选框值传递给另一个计算选择总数的函数,但我的代码没有;t运行
- 70%的时间运行JavaScript函数,从函数数组中随机选择
- 从对象方法内部的数组中运行console.log
- 如何在运行时向计算可观察量添加其他数组项
- 运行字符串数组并在 url 中找到匹配项,如何做到这一点
- 尝试使用 jsrender在 for 循环中的数组上运行函数
- 在运行之前确定数据是否是新的(将数组与 JSON 进行比较)
- 为什么我的数组在我的 savetime 函数中未定义,但在其他函数中正常运行
- D3.js键功能在简单的选择器/数组组合上运行两次
- 有没有办法防止字符串像多维数组一样运行
- 如何在解析中对对象数组运行查询
- 如何在运行重复计数后查找数组中重复值的索引
- 传入函数数组作为参数,对于函数中的每个函数运行函数
- 对列表/数组中的每个项目运行相同的函数
- 如何在 JavaScript 中运行时将数组保存在对象中
- 通过同一数组运行两个 for 循环
- 如何通过对象数组运行forEach并为具有空字符串的对象属性设置值?