[英]Nested for loops, is there a better way?
我需要從存儲在數組中的對象中刪除空屬性,而不觸及原始數組。
這是我的代碼:
// first I create a copy of the array
parsedShapes = [];
for (var i in shapes) {
parsedShapes.push(shapes[i]);
}
// then for each objects in the new array, I delete all the empty attributes.
for (var i in parsedShapes) {
var objects = parsedShapes[i];
for (var j in objects) {
if (objects[j] === "") {
delete objects[j];
}
}
}
這段代碼有效,但我想知道是否有更好的方法來處理這個操作。
謝謝。
要創建數組的副本,請執行以下操作:
var newArray = oldArray.slice(0);
除此之外,我不能想到任何更簡單的方法來過濾掉空值,而不是僅僅將它們放在那里。
如果你不能改變'形狀'的值,我會嘗試這樣的事情:
var parsedShapes = shapes.map(function(item){
var obj = {};
for(var i in item){
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
}
return obj
});
這樣你只需要通過'形狀'進行一個循環,而不必遍歷'形狀'來創建'parsedShapes',然后遍歷'parsedShapes'來清除空白。
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
這將清除任何值'null'或“”。 我假設值為'0'或'false'的東西不被視為“空”。
注意 filter()僅適用於一個數組。 因此,如果集合中的項目是對象,那么使用filter()將無法工作。
您可能會使用filter
功能執行此操作,例如:
var filtered = object_filter(parsedShaped, function (key, shape) {
return shape !== "";
});
過濾器類似於:
function object_filter(array) {
var result = {};
object_map(object, function (key, value) {
if (filter_function(key, value)) {
result[key] = value;
}
});
return result;
}
大多數框架都有這樣的功能。 如果沒有,寫你自己的:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.