2016-05-05 22 views
2

下面是情況 -對一個對象進行迭代以驗證它是否存在於一個數組中

我有一個數組和一個對象。

說:

var Array = ["field1", "field2", "field3"]; 
var Object = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined} 

*對象中的值不那麼重要,現在

使用underscoreJS我想遍歷對象和檢查,看看是否每個鍵的存在Array數組。如果是這樣,我想能夠將其值設置爲true,如果不是,我想將其設置爲false。

到目前爲止,我已經試過:

_.mapObject(Object, function(val, key){ 

     for (var j = 0; j < Array.length; j++) { 
      currentKey = Array[j]; 
      (function(i){ 
       for (var k = 0; k < Array.length; k++) { 
        if(key === Array[i]) { 
         return val = true; 
        } else { 
         return val = false; 
        } 
       } 
      })(currentKey); 
     } 

    }); 

媽非常混亂;至少對我來說。任何幫助是讚賞。

+3

這是一個非常糟糕的想法是將你的對象命名爲Object和你的數組Array,因爲它們是內置的類名,你很可能會在後面得到很多有趣的錯誤。相反,如何'obj'和'arr'? – phihag

+0

如果只有其中一個鍵不相同,則不得'返回false'。 – Bergi

回答

1

下面是使用下劃線的解決方案:

var result = _.mapObject(Object, function(value, field){ 
     return _.contains(Array, field); 
    }); 

,或者如果你想改變物體本身:

var result = _.each(Object, function(value, field){ 
     return _.contains(Array, field); 
    }); 
+0

非常感謝你@粗糙的兔子! –

0

你不需要underscore做到這一點:

var arr = ['a','b','c'], 
 
     obj = {a: '', b: '', c: '', d:''}; 
 

 
function check (a, o) { 
 
    for (var key in o) { 
 
     if (a.indexOf(key) != -1) { 
 
      o[key] = true 
 
     } 
 
    } 
 
} 
 

 
check(arr,obj); 
 

 
document.write(JSON.stringify(obj))

1

我不認爲你需要強調的是:

var a = ["field1", "field2", "field3"]; 
var o = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined} 

for (var k in o) { 
    o[k] = a.indexOf(k) != -1; 
} 
1

正如其他人說,有不需要下劃線。

您可以使用本機Object.keys返回一個own密鑰數組,然後遍歷它們。 Object.keys將不包括來自for in將會的原型鏈的繼承屬性。然而,這對於大型數據集來說可能是個問題,速度相當慢。

Object.keys(obj) 
    .forEach(function (key) { 
     obj[key] = (arr.indexOf(key) !== -1); 
    }); 

Fiddle

Object.keys

相關問題