2017-04-05 124 views
-4

我有一個對象,我想在當前月份之前/之前使Months爲false。如何循環瀏覽JavaScript對象的屬性對象

前:

var oObj = { 
       "isJan" : true, 
       "isFeb" : true, 
       "isMar" : true, 
       "isApr" : true, 
       "isMay" : true, 
       "isJun" : true, 
       "isJul" : true, 
       "isAug" : true, 
       "isSep" : true, 
       "isOct" : true, 
       "isNov" : true, 
       "isDec" : true 
      } 

今天是5月,因此對象應該是:

  { 
       "isJan" : false, 
       "isFeb" : false, 
       "isMar" : false, 
       "isApr" : false, 
       "isMay" : true, 
       "isJun" : true, 
       "isJul" : true, 
       "isAug" : true, 
       "isSep" : true, 
       "isOct" : true, 
       "isNov" : true, 
       "isDec" : true 
      } 
+2

請告訴我們你已經嘗試了什麼。你卡在哪裏? – Bergi

+0

可能的重複[如何循環或枚舉JavaScript對象?](https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-object) – boghyon

回答

0

您可以使用for循環如圖他人。但是,你也想確保你得到的關鍵是對象的實際屬性,而並非來自原型:

for (var key in p) { 
if (p.hasOwnProperty(key)) { 
console.log(key + " -> " + p[key]); 
} 
} 

希望這將幫助!

0

你可以做這樣的事情:

var keys = Object.keys(oObj) 

這給數組形式的所有鍵。然後你可以使用簡單的for循環來解析它。

for(var i=0; i<keys.length; i++){ 
    var individual_obj = oObj[key[i]] ; 
    // set your conditions here 
} 
1

試試這個

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
 
/*var inputObj = { 
 
    "isJan": true, 
 
    "isFeb": true, 
 
    "isMar": true, 
 
    "isApr": true, 
 
    "isMay": true, 
 
    "isJun": true, 
 
    "isJul": true, 
 
    "isAug": true, 
 
    "isSep": true, 
 
    "isOct": true, 
 
    "isNov": true, 
 
    "isDec": true 
 
};*/ 
 
var currentMonth = new Date().getMonth(); 
 
var outputObj = {}; 
 
months.forEach(function(key, index){ 
 
    outputObj[ "is" + key ] = (index <= currentMonth); 
 
}); 
 
console.log(outputObj);

+0

很乾淨。 +1 –

-1
  • 拿鑰匙
  • 獲取當前月份加1(因爲你想避免月太)
  • 環直到月份值並使其爲假

就是這樣。

var oObj = { 
 
    "isJan": true, 
 
    "isFeb": true, 
 
    "isMar": true, 
 
    "isApr": true, 
 
    "isMay": true, 
 
    "isJun": true, 
 
    "isJul": true, 
 
    "isAug": true, 
 
    "isSep": true, 
 
    "isOct": true, 
 
    "isNov": true, 
 
    "isDec": true 
 
} 
 
var k = Object.keys(oObj); 
 
var month = new Date().getMonth() + 1; 
 
console.log(i); 
 
for (var i = 0; i < month; i++) { 
 
    oObj[k[i]] = false; 
 
} 
 

 
console.log(oObj);

+0

JavaScript不確保按照鍵添加到對象的順序列出鍵。儘管現在它在V8中的工作方式如此,但他們可以在不違反標準的情況下對其進行更改以利於優化。如果您想按照添加的順序列出密鑰,地圖就是要走的路。 –

0

使用Object.keys()Array.prototype.indexOf()String.prototype.slice()功能的解決方案:

var oObj = { 
 
     "isJan" : true,"isFeb" : true,"isMar" : true,"isApr" : true,"isMay" : true,"isJun" : true,"isJul" : true,"isAug" : true,"isSep" : true,"isOct" : true,"isNov" : true,"isDec" : true 
 
    }, 
 
    monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], 
 
    currentM = new Date().getMonth(); 
 

 
Object.keys(oObj).forEach(function (k) { 
 
    oObj[k] = monthNames.indexOf(k.slice(2)) > currentM; 
 
}); 
 

 
console.log(oObj);

+0

我想它應該是'slice(0,3)'。順便說一句,這是一個很好的答案。編輯:Woops。我的失敗。認爲該名單是月份名稱('Januany'等)。切片很好。 –

-1

你需要做兩件事情

  1. 遍歷對象 可以使用Object.keys獲取對象的排列鍵的

  2. 使循環 內的條件要檢查的對象的關鍵月份當月之前或不。爲此,你可以使用getMonth功能從Date對象

例子:

const oObj = { 
 
\t "isJan" : true, 
 
    "isFeb" : true, 
 
    "isMar" : true, 
 
    "isApr" : true, 
 
    "isMay" : true, 
 
    "isJun" : true, 
 
    "isJul" : true, 
 
    "isAug" : true, 
 
    "isSep" : true, 
 
    "isOct" : true, 
 
    "isNov" : true, 
 
    "isDec" : true 
 
} 
 
const now = new Date(); 
 
const currentMonth = now.getMonth(); 
 
const keys = Object.keys(oObj); 
 

 
for (var i = 0; i < keys.length; i += 1){ 
 
     oObj[keys[i]] = currentMonth < i; 
 
} 
 
console.log(oObj);

+0

JavaScript不能確保按照它們添加到對象的順序列出鍵。儘管現在它在V8中的工作方式如此,但他們可以在不違反標準的情況下對其進行更改以利於優化。如果您想按照添加的順序列出密鑰,地圖就是要走的路。 –