【问题标题】:Javascript Function test each array and return all in arrayJavascript函数测试每个数组并返回数组中的所有内容
【发布时间】:2017-05-03 13:43:57
【问题描述】:

大家好,感谢您的帮助。

嗨,这里有一个游戏引擎的上下文,我想知道是否存在一种简单的方法来返回每个数组?例如:[真,真,假,假] 这里的 sn-p i 使它更易于阅读和干净,但与我需要做的非常相似。

 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]');

【问题讨论】:

  • 究竟是什么逻辑,判断数组中的false是否为真值?
  • 测试阵列 GateX 是否具有所有项目配方来构建 ex:门的示例。如果一个为假,则无法构建,并且需要在数组中显示原因和位置

标签: javascript arrays function return


【解决方案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】:

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

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

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]
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • OMG NICE NICE ,我刚开始,我不知道所有的 JavaScript 技巧。你的代码很干净。我将更多地研究地图功能。非常感谢你的朋友。对于我的变量名,我通常根据它们的重要性和它们的范围用小写或大写写。因为一些 var 用于特定的 .js 文件,而其他需要用于所有 .js 文件。我确实夸大了这个例子。非常感谢你的帮助,你很棒。
  • 这些可以使这个函数正常工作,但数组处于动态位置。 var Gate1 = [[4, 6],[3, 4]] // 也给出 [true, true, false, false]
  • 顺序无关紧要。您需要相同的订单吗?
  • 对不起,是的,我输入错误。是真的,顺序无所谓。 对于具有强制顺序的版本是的。 我很想研究这两个代码之间的区别。这对你很好。
【解决方案3】:

试试这个...使用 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]');

【讨论】:

  • JSON.stringify,很高兴我会研究这个,正是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多