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函数。但是,它不起作用。
发布于 2018-01-19 13:55:14
您可以采取一种迭代的方法,收集所有的部件数组,并使用最后的数组来获得一个数字。
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; }
发布于 2018-01-19 12:53:58
结果的数量会迅速增长。在您的例子中,它将有3*4*3*3*3*3*4结果,即3888个结果,但是使一些子数组更大,和/或添加更多的子数组会快速地将结果的数量乘以。
您可以使用一个发生器函数,然后从其中选择第一个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);
使用spread语法,您可以使函数将子数组作为单独的参数(而不是使用嵌套数组),这使得代码的某些部分更具可读性(但这是有争议的):
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);
https://stackoverflow.com/questions/48341131
复制相似问题