0
我使用火力地堡作爲後端,我經常保存陣列是這樣的:轉換火力陣列狀物體到陣列
var arr = [null, "Pete", "Mary", null, null, null, null, null, "Joe"]
由於火力地堡不存儲數組作爲陣列,當檢索到的值,我得到這樣的:
{ 1: "Pete", 2: "Mary", 8: "Joe" }
這的事實,我經常存儲陣列,有時存儲陣列如下變得更加複雜:
{
1: { 1: "Pete", 2: "Mary", 8: "Joe" },
4: { 4: "Lisa" }
}
我想這個對象恢復到原來的陣列排列的,這將是:
[
[null, null, null, null, null, null, null, null, null],
["Pete","Mary",null,null,null, null, null, null, "Joe"],
[null, null, null, null, null, null, null, null, null],
[null, null, null, null, null, null, null, null, null],
[null, null, null, null, "Lisa",null,null, null, null]
]
我實現了一個功能數組的數組,它的工作原理,但感覺非常,非常糟糕。應該有更好的方法來做到這一點:
function firebaseToRealArray(fbArray) {
if (Array.isArray(fbArray) || typeof fbArray === "undefined") {
return fbArray
} else {
var keyss = Object.keys(fbArray);
var height = +keyss[keyss.length - 1] + 1;
var resultArray = [];
var maxLength = _maxLength(fbArray, height)
for (var i = 0; i < height; i++) {
if (typeof fbArray[i] === "undefined") {
resultArray.push(_objToArray(fbArray[i], maxLength))
} else {
resultArray.push(_objToArray(fbArray[i], maxLength))
}
}
return resultArray;
}
}
function _maxLength(arr, height) {
var maxLength = 0;
for (var i = 0; i < height; i++) {
if (Array.isArray(arr[i])) {
maxLength = Math.max(maxLength, arr[i].length)
} else if (typeof arr[i] === "undefined") {
maxLength = Math.max(maxLength, 0);
} else {
maxLength = Math.max(maxLength, +Object.keys(arr[i])[Object.keys(arr[i]).length - 1]);
}
}
return maxLength + 1
}
function _objToArray(obj, l) {
if (typeof obj === "undefined") {
return _createArray(l, null)
}
var resArray = [];
for (var i = 0; i < l; i++) {
if (typeof obj[i] === "undefined") {
resArray.push(null);
} else {
resArray.push(obj[i]);
}
}
return resArray
}
function _createArray(len, itm) {
var arr1 = [itm],
arr2 = [];
while (len > 0) {
if (len & 1) arr2 = arr2.concat(arr1);
arr1 = arr1.concat(arr1);
len >>>= 1;
}
return arr2;
}
我的第一個問題是:
有沒有我可以使用,客戶端,這些類似數組的對象轉換爲一個火力點功能實際的數組?
如果不是這樣,我的問題是:
什麼來實現這個功能,我自己的最好方法?
或者:
有沒有別的東西,我完全可以俯瞰?
您可以檢查我的方法來創建此數組[這裏](https://jsfiddle.net/nj0ttm2w/)。 – Shubham
謝謝,但我不知道最長陣列的長度。 – Sventies