Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多维数组-测试嵌套数组中的所有值是否相等_Javascript_Jquery_Arrays - Fatal编程技术网

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;i
win=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
,大多数其他解决方案会更好。