首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript -Processing多维数组

Javascript -Processing多维数组
EN

Stack Overflow用户
提问于 2018-01-19 12:28:02
回答 2查看 68关注 0票数 2
代码语言:javascript
运行
复制
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)
        })
    })

});

这是我的硒密码。

我必须按正确的顺序得到数组的每个元素。

例如。

代码语言:javascript
运行
复制
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]];

预期产出:

代码语言:javascript
运行
复制
1471117 1471112 1471119 1471113 1471127 1471122
1471129 1471123 1471127 1471122 1471129 1471123
...

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-19 13:55:14

您可以采取一种迭代的方法,收集所有的部件数组,并使用最后的数组来获得一个数字。

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2018-01-19 12:53:58

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

您可以使用一个发生器函数,然后从其中选择第一个X结果,或者所有结果(下面我将这样做):

代码语言:javascript
运行
复制
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);

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

代码语言:javascript
运行
复制
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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48341131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档