我想了很多,並且找不到答案:如何在未知數量的數組中獲取未知數量的元素的所有組合?
我需要編寫一個js函數來獲取具有未知數量的數組的對象,該數組又有一個未知數元素的數量。像這樣:
{
Color: ["Color : Red", "Color : Blue", "Color : Green"],
Size : ["Size : S", "Size : M", "Size : L"],
Material : ["Material : Cotton"],
Something : ["Something : Anything", "Something : Anotherthing"]
}
同樣,這可能是很多更多(或更少)的陣列和元素,但在這種情況下,我想實現這樣的輸出:
{0: "Color : Red > Size : S > Material : Cotton > Something : Anything",
1: "Color : Red > Size : S > Material : Cotton > Something : Anotherthing",
2: "Color : Red > Size : M > Material : Cotton > Something : Anything",
3: "Color : Red > Size : M > Material : Cotton > Something : Anotherthing",
4: "Color : Red > Size : L > Material : Cotton > Something : Anything",
5: "Color : Red > Size : L > Material : Cotton > Something : Anotherthing",
6: "Color : Blue > Size : S > Material : Cotton > Something : Anything",
...
...[and so forth... ]}
我試着在循環中做循環,但失敗了。 然後我第一次嘗試尋找最長陣列,從休息中提取,然後通過每一個陣列中最長的每一個元素循環:
createMap = function(tagObj, longest){
var longObj = tagObj[longest];
var current = {};
delete tagObj[longest];
$.each(tagObj, function(name, obj){
$.each(obj, function(index, tag){
$.each(longObj, function(i, iniTag){
if (current[i]!= undefined){
current[i] += " > " + tag;
}
else current[i] = iniTag + " > " + tag;
})
})
})
console.log(current);
}
但這只是導致:
{0: "Color : Red, Size : S, Size : M, Size : L, .... "}
希望我不僅僅忽略了一些非常明顯的事情 - 但是我花了太多時間在這件事上,只是無法弄清楚。現在我是一個緊張的沉船,不能再直接思考了。 我非常感謝一些幫助!提前致謝!
你不應該在這裏嵌套比2更深的東西。遍歷對象鍵和每個鍵,遍歷它的值(這是一個數組)。 –
您將要遇到的問題是主對象中的鍵沒有保證的遍歷順序。這意味着你無法預測組合字符串的外觀。 「顏色」屬性*可能是第一個,或者它可能不是第一個。 – Pointy
那麼,最初的順序並不重要,但是你是對的,最後,輸出應該都具有相同的順序。我甚至沒有到達那裏。 Thx @Pointy指出它! – stuckoverflow