[英]Remove undefined from multidimensional array
因此,我需要從多維數組中刪除空的(未定義)項目。 Atm我的代碼看起來像這樣(這是我運行的一種方法,所以這就是我使用this
的原因:
f: function(arr) {
var __ = this;
arr = arr.filter(function(item) {
return Array.isArray(item) ? __.f(item) : typeof(item) !== "undefined";
});
return arr;
}
但是如果我運行console.log(myObject.f([1, 2, , , , , 3, 4, [5, , , , , ], 6, , , , 8, 3, [[[], 9]]]));
我得到[ 1, 2, 3, 4, [ 5, , , , ], 6, 8, 3, [ [ [], 9 ] ] ]
,,,, [ 1, 2, 3, 4, [ 5, , , , ], 6, 8, 3, [ [ [], 9 ] ] ]
,6,8,3 [ 1, 2, 3, 4, [ 5, , , , ], 6, 8, 3, [ [ [], 9 ] ] ]
,這有點奇怪。 對於第一層,我做得很好,但是從內部層中只刪除了一個未定義的層。 我也想刪除一個不包含任何項目的子數組。
這樣的事情怎么樣:
var arr = [1, 2, , , , , 3, 4, [5, , , , , ], 6, , , , 8, 3, [[[], 9]]];
var remove = function (array) {
var result = [];
array.forEach(function (item) {
if (Array.isArray(item) && item.length!=0) {
// Item is a nested array, go one level deeper recursively
result.push(remove(item));
}
else if (typeof item !== 'undefined') {
result.push(item);
}
});
return result;
};
然后console.log(remove(arr));
給我們[1, 2, 3, 4, [5], 6, 8, 3, [[[], 9]]]
用減人! 他們好美!
function stripUndefined (arr) {
return arr.reduce(function (result, item) {
result.push( Array.isArray(item) && !item.length ? stripUndefined(item) : item );
return result;
}, []);
}
與Gilad的答案類似,但是完全跳過了導致空數組的數組(例如[,,,,,]
)
function cleanArray2d(array){
var result = [];
array.forEach(function (item) {
if (Array.isArray(item) && item.length!=0) {
// Item is a nested array, go one level deeper recursively
var nestedArray = cleanArray2d(item);
if (nestedArray.length > 0)
result.push(cleanArray2d(item));
}
else if (typeof item !== 'undefined' && item != "") {
result.push(item);
}
});
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.