簡體   English   中英

嵌套for循環,有更好的方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM