2015-04-07 134 views
0

編輯:解決見下面比較陣列的長度對象值中的對象與JavaScript

EDIT最終溶液:該值名稱不相同

對象1

var obj1 = { 
    val1a : 4, 
    val2a : 3 , 
    val3a : 7 
} 

對象2與陣列

var obj2 = { 
    val1b : [one, two, three], 
    val2b : [oneA, twoA, threeA], 
    val3b : [oneB] 
} 

我想要做的是以下

if(obj1.val1a === obj2.val1b.length){ 
// code 
} 

但我不希望它如此具體。有沒有辦法來循環每個對象,並返回OBJ2的。如果你的模式是不明確的一個不匹配OBJ1

解決方案以下劃線

function checkData(obj1, obj2) { 

     result = [] 

     var keys_obj1 = Object.keys(obj1) 

     var keys_obj2 = Object.keys(obj2)   

     _.each(keys_obj1, function(num, i){ 
      if(obj1[keys_obj1[i]].length !== obj2[keys_obj2[i]]) { 
       result.push(keys_obj1[i]); 
      } 
     }) 
     return result; 

    } 
+0

在由名稱相關的每個對象的鑰匙?如果是這樣如何?或者你只是想比較一下? –

+0

您如何構建數據? –

+0

他們是不一樣的?有什麼模式?對於第二個obj,第一個obj和val [i] b總是會是val [i] a? – Rod

回答

0

要做到這一點,如果兩個對象具有相同的名稱(因爲是一對),然後使用 The For/In Loop在它們之間迭代的一個最好的辦法並返回兩者的值,然後進行比較。

重拍使用Object.keys使兩個對象鍵陣列的撥弄,現在它的工作原理即使當鍵是不一樣的(對象索引以下)

var obj1 = { 
 
    val1a : 4, 
 
    val2a : 3 , 
 
    val3a : 7 
 
} 
 

 
var obj2 = { 
 
    val1b : ['one', 'two', 'three'], 
 
    val2b : ['oneA', 'twoA', 'threeA'], 
 
    val3b : ['oneB'] 
 

 
} 
 

 
var keys_obj1 = Object.keys(obj1) 
 
var keys_obj2 = Object.keys(obj2) 
 

 
for (i = 0; i < keys_obj1.length; i++) { 
 
    console.log(keys_obj1[i]+'-'+obj1[keys_obj1[i]]) 
 
    console.log(keys_obj2[i]+'-'+obj2[keys_obj2[i]].length); 
 
    if(obj1[keys_obj1[i]] === obj2[keys_obj2[i]].length) { 
 
     //match 
 
    } 
 
}

控制檯輸出:

"val1a-4" 
"val1b-3" 
"val2a-3" 
"val2b-3" 
"val3a-7" 
"val3b-1" 
+0

不幸的是名字不一樣; /否則,這是可行的 – mattwilsn

0

的值,你可以使用對象的數組像:

var object = [ 
    {table : [one, two, three], length : 3}, 
    {table : [one, two, three], length : 4}, 
... ]; 

,並使用比較值:

object[i].table.length === object[i].length 

這是一個小b它不同於你的型號

但我希望它可以幫助。

-1

已更新: 也許是這樣的。你將不得不確保屬性名稱是相同的:

var obj1 = { 
    val1a : 4, 
    val2a : 3 , 
    val3a : 7 
}; 

var obj2 = { 
    val1a : ['one', 'two', 'three'], 
    val2a : ['oneA', 'twoA', 'threeA'], 
    val3a : ['oneB'] 
}; 

for(var name in obj1) { 
    if(obj1[name] === obj2[name].length) { 
     alert("match"); 
    } 
} 
+0

已更新。我認爲'(我在obj1中)「中的'i'是一個索引,但它是屬性名稱的名稱。 – jwatts1980

0

很囉嗦,但唯一的辦法是我可以瘦k到做到這一點:

// for each object you are going to... 
function pullData(obj) { 
    var out = {}; 
    var token; 

    // grab the keys 
    var keys = Object.keys(obj).map(function (el) { 

     // token is the character at the end of the key 
     // the key that is returned is the key without the token 
     token = el.slice(-1) 
     return el.slice(0, 4); 
    }); 

    // for each key, add it to the output object 
    for (var i = 0, l = keys.length; i < l; i++) { 
    out[keys[i]] = obj[keys[i] + token] 
    } 

    // return an object containing the data and the token 
    return {data: out, token: token}; 
} 

// take both the output from both objects being parsed 
function isNotMatch(obj1, obj2) { 
    var out = []; 

    // loop over the first object using the now identical keys 
    for (var p in obj1.data) { 

     // check the values and lengths 
     // if they're not the same push the key and the token as a string 
     // to the output array 
     if (obj1.data[p] !== obj2.data[p].length) { 
      out.push(p + obj2.token); 
     } 
    } 

    // return the array of non-matches 
    return out; 
} 

isNotMatch(pullData(obj1), pullData(obj2)); 

DEMO