【问题标题】:Javascript -Processing Multidimensional arrayJavascript - 处理多维数组
【发布时间】:2018-06-28 16:42:56
【问题描述】:
Arrayinarray=[];
let options = driver.findElements(By.css("[section='trim'] select"));
options.then(swap=>{
    swap.map((key)=>{
        var s=key.findElements(By.css("option"));
        s.then(mt=>{
            Arrayinarray.push(mt)
        })
    })

});

这是我的硒代码。

我必须按正确的顺序获取数组的每个元素

例如。

var Arrayinarray=[[1,2,3],[4,5,6,5],[7,8,9],[1,6,3],[1,5,7][1,2,2],[7,2,9,3]];

预期输出:

1471117 1471112 1471119 1471113 1471127 1471122
1471129 1471123 1471127 1471122 1471129 1471123
...

我必须置换这个多维数组的组合。我放置了许多for 循环和map 函数。但是,它不起作用。

【问题讨论】:

  • 请向我们展示您的代码。
  • @AyyappanRK 不,不要将代码放在 cmets 中。编辑您的问题并将其放在那里..

标签: javascript arrays loops multidimensional-array


【解决方案1】:

结果的数量会迅速增长。在您的情况下,它将有 3*4*3*3*3*3*4 个结果,即 3888 个结果,但是使一些子数组更大,和/或添加更多子数组会使结果数量迅速增加。

您可以使用generator function,然后从中选择第一个 X 结果,或者全部选择(我在下面这样做):

function * generateCombis(arr) {
    if (arr.length === 1) return yield * arr[0];
    const shift = 10**(arr.length-1);
    for (let val of arr[0]) {
        for (let val2 of generateCombis(arr.slice(1))) yield val*shift+val2
    }
}
// Example
var Arrayinarray=[[1,2,3],[4,5,6,5],[7,8,9],[1,6,3],[1,5,7], [1,2,2],[7,2,9,3]];

const result = Array.from(generateCombis(Arrayinarray));
console.log(result);

使用扩展语法,您可以使函数将子数组作为单独的参数(而不是使用嵌套数组),这使得代码的某些部分更具可读性(但这值得商榷):

function * generateCombis(current, ...rest) {
    if (!rest.length) return yield * current;
    const shift = 10**rest.length;
    for (let val of current) {
        for (let val2 of generateCombis(...rest)) yield val*shift+val2
    }
}
// Example
var Arrayinarray=[[1,2,3],[4,5,6,5],[7,8,9],[1,6,3],[1,5,7], [1,2,2],[7,2,9,3]];

const result = Array.from(generateCombis(...Arrayinarray));
console.log(result);

【讨论】:

    【解决方案2】:

    您可以通过收集所有部分数组并获取最终数组来获取数字来采取迭代方法。

    var values = [[1, 2, 3], [4, 5, 6, 5], [7, 8, 9], [1, 6, 3], [1, 5, 7], [1, 2, 2], [7, 2, 9, 3]],
        result = values
            .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
            .map(s => +s.join(''));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多