2016-09-29 60 views
0

比較兩個對象如何做在一個更可讀的方式?:由多個屬性

if (nextProps.a !== this.props.a || 
     nextProps.b !== this.props.b || 
     nextProps.cc !== this.props.cc || 
     nextProps.d !== this.props.d){ 

} 

注意,所討論的對象具有更多的屬性以下是,只是A,B,CC,和d但我只想比較這些屬性。我正在使用ES6。

回答

1

嘗試這樣的事情

isOk = true; 
props = ["a","b","cc","d"]; //replace this with whatever your properties are from 
for(i in props){ 
    if(nextProps[i]==this.props[i]){ 
     isOk = false; 
      break; 
    } 
} 

if(isOk){ 
    // :) 
} 
0
var names = Object.getOwnPropertyNames(nextProps); 

var result = false; 
for (var i = 0; i < names.length; i++) { 
    result = nextProps[names[i]] !== this.props[name[i]]; 
    if (result) 
     break; 
} 
if (result) { 
    // ... 
} 
0

我會寫一個方法:

// Comparison of all properties equal 
 
function propsEqual(obj1, obj2, props) { 
 
    var equal = true; 
 
    var propsLen = props.len; 
 
    while(propsLen-- && equal) { 
 
    var prop = props[propLen]; 
 
    equal = obj1[prop] === obj2[prop]; 
 
    } 
 
    return equal; 
 
} 
 

 
// Comparison of any properties equal 
 
function anyPropsEqual(obj1, obj2, props) { 
 
    var equal = false; 
 
    var propsLen = props.len; 
 
    while(propsLen-- && !equal) { 
 
    var prop = props[propLen]; 
 
    equal = obj1[prop] === obj2[prop]; 
 
    } 
 
    return equal; 
 
}

0

使用List.some:

["orgId","roleId","userGroupId","userId"].some(v => a[v] !== b[v]) 

let a = {orgId: 1,roleId:2, userGroupId:3, userId:4}; 
 
let b = {orgId: 1,roleId:2, userGroupId:3, userId:4}; 
 
console.log(["orgId","roleId","userGroupId","userId"].some(v => a[v] !== b[v])); 
 

 
a = {orgId: 1,roleId:2, userGroupId:3, userId:5}; 
 
b = {orgId: 1,roleId:2, userGroupId:3, userId:4}; 
 
console.log(["orgId","roleId","userGroupId","userId"].some(v => a[v] !== b[v])); 
 

 
a = {orgId: 1,roleId:2, userGroupId:3, userId:4}; 
 
b = {orgId: 2,roleId:2, userGroupId:3, userId:4}; 
 
console.log(["orgId","roleId","userGroupId","userId"].some(v => a[v] !== b[v]));