Javascript 多维数组-测试嵌套数组中的所有值是否相等
因此,我有一个如下所示的数组:Javascript 多维数组-测试嵌套数组中的所有值是否相等,javascript,jquery,arrays,Javascript,Jquery,Arrays,因此,我有一个如下所示的数组: 我将如何用javascript测试它,以确定1st索引是否填充了X 示例:[[“X”、“X”、“X”]、[“”、“”、“”、[“”、“”、“”]、[“”、“”]] 我一直在想我应该做这样的事情,但感觉会有一个更快的方法 var counter = 0, win, b = [ ["X","X","X"], ["","",""], ["","",""] ], num = b[0].length; for(var i=0; i<num;
我将如何用javascript测试它,以确定1st索引是否填充了X
示例:[[“X”、“X”、“X”]、[“”、“”、“”、[“”、“”、“”]、[“”、“”]]
我一直在想我应该做这样的事情,但感觉会有一个更快的方法
var counter = 0,
win,
b = [ ["X","X","X"], ["","",""], ["","",""] ],
num = b[0].length;
for(var i=0; i<num; i++){
if(b[0][i]==="X"){ counter++; }
}
if(num===counter){ win=true; }
var计数器=0,
赢
b=[[“X”、“X”、“X”]、[“”、“”、“”、[“”、“”、[“”、“”、“”]、[“”、“”],
num=b[0]。长度;
对于(var i=0;iwin=true;
对于(变量i=0;i
win=true;
对于(变量i=0;i
使用数组.原型.every
使用Array.prototype.every
下面介绍如何测试数组是否包含相同的元素:
allTheSame = someArray.every(function(x, _, ary) { return x == ary[0] })
看
或者,对于ES5之前的发动机:
allTheSame = function(ary) {
for(var i = 1; i < ary.length; i++)
if(ary[i] != ary[0]) return false;
return true;
}
allTheSame=函数(ary){
对于(变量i=1;i
以下是如何测试数组是否包含相同的元素:
allTheSame = someArray.every(function(x, _, ary) { return x == ary[0] })
看
或者,对于ES5之前的发动机:
allTheSame = function(ary) {
for(var i = 1; i < ary.length; i++)
if(ary[i] != ary[0]) return false;
return true;
}
allTheSame=函数(ary){
对于(变量i=1;i
使用数组.原型.reduce
var win=b[0].reduce(function (v, c) { return v && (c=="X") }, true);
使用Array.prototype.reduce
var win=b[0].reduce(function (v, c) { return v && (c=="X") }, true);
另一个,只是为了给你多一个选择:
var win = new RegExp("^X{"+b[0].length+"}$").test(b[0].join(''));
干杯再来一杯,再给你一个选择:
var win = new RegExp("^X{"+b[0].length+"}$").test(b[0].join(''));
欢呼声与其他答案类似,但有些扭曲:
var all = function(val, arr) {
var fn = function(arr) {return arr.every(function(item) {return item === val;});};
return arguments.length > 1 ? fn(arr) : fn;
};
var win = all('X', b[0]); //=> true
// or
var allXs = all('X');
var win = allXs(b[0]); //=> true
或者如果你只是想知道它们是否都一样:
var allAlike = function(arr) {
return (arr.length == 0) || all(arr[0], arr);
}
var win = allAlike(b[0]);
如果你有一个合适的类似咖喱的功能,这会更容易。与其他答案类似,但有点曲折:
var all = function(val, arr) {
var fn = function(arr) {return arr.every(function(item) {return item === val;});};
return arguments.length > 1 ? fn(arr) : fn;
};
var win = all('X', b[0]); //=> true
// or
var allXs = all('X');
var win = allXs(b[0]); //=> true
或者如果你只是想知道它们是否都一样:
var allAlike = function(arr) {
return (arr.length == 0) || all(arr[0], arr);
}
var win = allAlike(b[0]);
如果您有一个合适的类似咖喱的功能,这将更容易实现。哈哈哈,这很酷:
var win = Array(b[0].length+1).join('X') == b[0].join('')
干杯!哈哈哈,这太酷了:
var win = Array(b[0].length+1).join('X') == b[0].join('')
干杯!下划线代表什么?只是一个空白填充符,可以更深入地挖掘吗?@NicholasHazel:一个未使用的参数(索引)。啊哈,数字也一样多。谢谢你的回答:-)下划线代表什么?只是一个空白的填充物来深入挖掘?@NicholasHazel:一个未使用的参数(索引)。啊,数字也一样多。谢谢你的回答:-)我明白,但我不想让人们只为我写代码。我更愿意知道一个基础并展开它:-)。谢谢你的帮助。最简单的答案往往是最好的。只需为var 0添加一个循环,测试行中的每个索引。然后加上一些修正的对角线数学,等等。我在这里得到了我想要的答案。决定编写一些函数并创建一个switch语句来确定计算机的移动。再次感谢!或者只做var-win=b[0]。连接(“”)==新数组(b[0]。长度+1)。连接('X')代码>如果你真的喜欢这种技术。@Scott,这是我的答案,我明白,但我不希望人们只为我写代码。我更愿意知道一个基础并展开它:-)。谢谢你的帮助。最简单的答案往往是最好的。只需为var 0添加一个循环,测试行中的每个索引。然后加上一些修正的对角线数学,等等。我在这里得到了我想要的答案。决定编写一些函数并创建一个switch语句来确定计算机的移动。再次感谢!或者只做var-win=b[0]。连接(“”)==新数组(b[0]。长度+1)。连接('X')代码>如果你真的喜欢这个技巧。@Scott,这是我的答案。哈哈哈,你应该想办法把它颠倒过来。很好的回答:-)哈哈哈,我应该想办法把它倒过来。很好的回答:-)非常有趣的概念。我可能会对此进行扩展,而不是上面的投票结果。干得好,谢谢。这是一个非常有趣的概念。我可能会对此进行扩展,而不是上面的投票结果。做得好,谢谢。每个
都稍微好一点,因为一旦它发现一个错误
。我提到了。reduce
,因为它更灵活。但是您指出的性能问题是选择的一个很好的理由。every
谢谢。every
稍微好一点,因为它会在找到false
后立即使用。我提到了。reduce
,因为它更灵活。但是您指出的性能问题是选择的一个很好的理由。每一个都要感谢。我听说正则表达式处理信息的速度很慢。我通常将它们用于基本属性(转换时间戳等),但对于这种情况,我认为这不是正确的解决方案。很棒的尝试,我经常使用:-)我听说正则表达式是处理信息的一种缓慢方式。我通常将它们用于基本属性(转换时间戳等),但对于这种情况,我认为这不是正确的解决方案。非常棒的尝试,我经常使用的东西:-)比你以前的帖子好得多。比你以前的帖子好得多。所以你把检查分为其他功能。也许会符合我的目的。谢谢:-)@NicholasHazel:是的,把它分解成可重用的函数。不过,这只有在您可能对这些函数有其他用途的情况下才有意义。如果您不再使用all
或allAlike
,那么大多数其他解决方案都会更好。因此,您正在将支票拆分为其他函数。也许会符合我的目的。谢谢:-)@NicholasHazel:是的,把它分解成可重用的函数。不过,这只有在您可能对这些函数有其他用途的情况下才有意义。如果不再使用all
或allAlike
,大多数其他解决方案会更好。