好吧,我知道有幾篇文章是關于獲取具有未知元素數量的未知數量陣列的乘積的 -
JavaScript - 從具有 m 個元素的 n 個陣列生成組合
基于Javascript中物件陣列的笛卡爾陣列
僅舉幾例 - 但是,我需要稍微扭曲一下 -
我想要的是一個可以輸出序列化物件陣列而不是陣列陣列的函式。
例如,如果函式的輸入是 -
scenarioBuilder({ENV: ["QA","UAT"], HOST: ["APP1", "APP2", "APP3"], API: ["Example1", "Example2"]})
輸出將是一個像這樣的序列化物件陣列 -
[{ENV: "QA", HOST: "APP1", API: "Example1"},
{ENV: "UAT", HOST: "APP1", API: "Example1"},
{ENV: "QA", HOST: "APP2", API: "Example1"},
{ENV: "UAT", HOST: "APP2", API: "Example1"},
{ENV: "QA", HOST: "APP3", API: "Example1"},
{ENV: "UAT", HOST: "APP3", API: "Example1"}]
等等等等等等
基本上采用 ENV、HOSTS 和 API 的陣列 - 并制作一個序列化的場景構建器。
我已經嘗試了一些方法來適應上述鏈接中的一些方法,但我沒有運氣。
具體來說 -
function cartesian(...args) {
var r = [], max = args.length-1;
function helper(arr, i) {
for (var j=0, l=args[i].length; j<l; j ) {
var a = arr.slice(0); // clone arr
a.push(args[i][j]);
if (i==max)
r.push(a);
else
helper(a, i 1);
}
}
helper([], 0);
return r;
}
但是 Javascript 不是我的主要語言,老實說,我不知道如何拆分陣列并重新組合物件。
任何人都可以試一試嗎?
一如既往地謝謝你。
uj5u.com熱心網友回復:
這只是一個遞回問題......
const data =
{ ENV : [ 'QA', 'UAT' ]
, HOST: [ 'APP1', 'APP2', 'APP3' ]
, API : [ 'Example1', 'Example2' ]
}
const scenarioBuilder = objXarr =>
{
let names = Object.keys( objXarr )
, len = names.length -1
, resp = []
;
buildIn( {}, 0)
return resp
function buildIn(obj, indx)
{
let key = names[indx]
for (let val of objXarr[ key ] )
{
let oo = {...obj,[key]:val}
if (indx < len ) buildIn(oo, indx 1)
else resp.push( oo )
}
}
}
console.log( scenarioBuilder( data ) )
.as-console-wrapper {max-height: 100%!important;top:0 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377988.html
標籤:javascript 数组
上一篇:用Java從陣列中洗掉元素
