Javascript函数测试每个数组并返回数组中的所有数组

时间:2016-12-18 08:50:13

标签: javascript arrays function return

大家好,感谢您的帮助。

你好在游戏引擎中有一个上下文,我想知道是否存在一个简单的方法来返回每个数组?例如:[真,真,假,假] 这里的代码片段让我看起来更简单干净,但与我需要做的非常相似。



 Gate1 = [];
Gate1 = [[3,4],[4,6]]; // [[ItemID,NbItem],[ItemID,NbItem]]

function check(ID, NEED, GVariable) {
for (var F=0; F<ID.length; F++) {
var Founds = [ID[F],NEED[F]];
if (Founds === GVariable[F]){
//return stop the loop, but i need to test all ID.length and return true or false in array it in array
		return true;
		}
		else {return false;}
	}
}
var Get = check([3,4,10,11],[4,6,8,7],Gate1);
console.log(Get); //need to be ===  Get[[true,true,false,false]] 
alert("Gets= "+Get+'\n'+'But i want = [true,true,false,false]');
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

您可以使用哈希表并检查所需的值。然后返回Array#map一个包含结果的数组。

我强烈建议您使用小写字母将变量重命名为更常见的样式。

&#13;
&#13;
function check(ID, NEED, GVariable) {
    var hash = Object.create(null);

    GVariable.forEach(function (a) {
        hash[a.join('|')] = true;
    });
    return ID.map(function (id, i) {
        return hash[[id, NEED[i]].join('|')] || false;
    });
}

var Gate1 = [[3, 4], [4, 6]], // [[ItemID,NbItem],[ItemID,NbItem]],
    Get = check([3, 4, 10, 11], [4, 6, 8, 7], Gate1);

console.log(Get); // [true, true, false, false]
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您还可以压缩IDNEED数组,并使用every函数比较压缩数据和GVariable数组:

function checkit(ID, NEED, GVariable) {
  var result = [], arrays = [ID, NEED];
  zipped = arrays[0].map(function(_,i){ 
      return arrays.map(function(array){return array[i]})
  });
  zipped.forEach(function(arr, idx) { 
    result.push(arr.every(function(elt, i) {
      return (elt == GVariable[i][idx]);
    }))
  })
  return result;
}

var Gate1 = [[3,4],[4,6]]; 
var Get = checkit([3,4,10,11],[4,6,8,7],Gate1);
console.log(Get); 

答案 2 :(得分:0)

试试这个...使用JSON.stringify()

Gate1 = [];
Gate1 = [[3,4],[4,6]]; // [[ItemID,NbItem],[ItemID,NbItem]]

function check(ID, NEED, GVariable) {
for (var F=0; F<ID.length; F++) {
var Founds = [ID[F],NEED[F]];
if (JSON.stringify(Founds) == JSON.stringify(GVariable[F])){
//return stop the loop, but i need to test all ID.length and return true or false in array it in array
        return true;
        }
        else {return false;}
    }
}
var Get = check([3,4,10,11],[4,6,8,7],Gate1);
console.log(Get); //need to be ===  Get[[true,true,false,false]] 
alert("Gets= "+Get+'\n'+'But i want = [true,true,false,false]');