【问题标题】:Looking for matches in multi-dimensional arrays inJavascript在 Javascript 中查找多维数组中的匹配项
【发布时间】:2017-10-11 01:05:27
【问题描述】:

我正在尝试在 Javascript 中匹配整个数组。我有一个 userInput 数组,我需要在多维数组中找到一个匹配的数组并输出匹配。

var t1 = [0,0,0];
var t2 = [1,0,0];
var t3 = [0,0,1];
var userInput = [0,0,0];
var configs = [t1, t2, t3];

我正在尝试找到一种将 userInput 与其他数组之一匹配并输出匹配数组的方法。 使用 underscore.js,我可以一次找到一个匹配项而无需循环,但这会返回一个布尔值。

var result = _.isEqual(userInput,t1) returns true

我需要在 configs 数组中找到匹配的数组。 我可以嵌套循环以通过配置,但我不知道如何将它与 userInput 匹配。

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array underscore.js


    【解决方案1】:

    您可以使用someevery 的组合

    var t1 = [0,0,0];
    var t2 = [1,0,0];
    var t3 = [0,0,1];
    var userInput = [0,0,0];
    var configs = [t1, t2, t3];
    var inputPresent = configs.some(a => userInput.every((u,i) => a[i] == u));
    console.log(inputPresent);

    如果你想知道现有输入的索引,你可以只包含一个三元组

    var t1 = [0,0,0];
    var t2 = [1,0,0];
    var t3 = [0,0,1];
    var userInput = [0,0,0];
    var configs = [t1, t2, t3];
    var inputIndex = -1;
    configs.some((a,n) => userInput.every((u,i) => a[i] == u)?(inputIndex=n,true):false);
    console.log(inputIndex);

    【讨论】:

      【解决方案2】:

      我会担心可能有重复的地方。如果您可以创建一个可以可靠地测试相等性的函数,那么这只是一个过滤器。

      var matches = configs.filter(config => _.isEqual(config, userInput));
      var match = matches[0];
      

      如果您想投资更多地使用图书馆,您可以使用 find 之类的东西

      var match = _.find(configs, config => _.isEqual(config, userInput));
      

      【讨论】:

        【解决方案3】:

        给定输入,您可以使用 Array.prototype.find()Array.prototype.toString()Array.prototype.join()

        var t1 = [0,0,0];
        var t2 = [1,0,0];
        var t3 = [0,0,1];
        var userInput = [0,0,0];
        var configs = [t1, t2, t3];
        
        var result = configs.find(arr => arr.join() === userInput.join());
        
        console.log(result);

        【讨论】:

          【解决方案4】:

          您可以使用Array#findIndex 在数组中查找匹配配置的索引。使用Array#every 查找相等的配置。

          var t1 = [0,0,0];
          var t2 = [1,0,0];
          var t3 = [0,0,1];
          var userInput = [0,0,1]; // this will fit t3 (index 2)
          var configs = [t1, t2, t3];
          
          var result = configs.findIndex(function(arr) {
            return arr.every(function(value, i) {
              return value === userInput[i];
            });
          });
          
          console.log(result);

          【讨论】:

            【解决方案5】:

            这行得通吗?

            var result = _.find(configs, function(t) {
              return _.isEqual(userInput, t);
            });
            

            如果需要知道索引:

            var index = -1;
            _.some(configs, function(t, idx) {
              if (_.isEqual(userInput, t)) {
                index = idx;
                return true;
              }
            });
            // index = -1 if not found, else the first index of configs that matches the userInput
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-06-20
              • 2012-09-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多