确定一个对象中有多少个键值发生了变化
Determine how many key values have changed in an object
我有两个相同的对象要比较,它们具有不同的数据类型作为对象属性(数组和对象)。
我想知道有多少属性与第一个不同。请参见下面的示例:
OriginalObject = {
names : [],
numbers : [],
dates :{
from: null,
to : null,
},
other :{
from: null,
to : null,
},
}
ModifiedObject = {
names : ['Steven', 'Judy'],
numbers : [1,5,7],
dates :{
from: 15152112512,
to : null,
},
other :{
from: null,
to : null,
},
}
由于姓名、编号和日期已更改,因此所需的输出为:3
我在想也许我可以遍历对象属性并使用 lodash 的 _.isEqual,但我想知道是否有一个简单的简写版本来实现这一点。
我用这个作为解决方案。
appliedFiltersCount (state) {
let changedCount = 0
Object.keys(state.filters).forEach((field) => {
if (field in state.filters && field in getDefaultState().filters) {
if (!isEqual(state.filters[field], getDefaultState().filters[field])) {
changedCount++
}
}
})
return changedCount
},
如果你想要一个使用lodash的解决方案,你可以应用_.toPairs()
on both of your objects. Then use _.differenceWith()
来比较获得的数组,最后得到比较数组的长度:
OriginalObject = {
names : [],
numbers : [],
dates :{
from: null,
to : null,
},
other :{
from: null,
to : null,
},
}
ModifiedObject = {
names : ['Steven', 'Judy'],
numbers : [1,5,7],
dates :{
from: 15152112512,
to : null,
},
other :{
from: null,
to : null,
},
}
console.log(_.differenceWith(_.toPairs(OriginalObject), _.toPairs(ModifiedObject), _.isEqual).length);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
我有两个相同的对象要比较,它们具有不同的数据类型作为对象属性(数组和对象)。
我想知道有多少属性与第一个不同。请参见下面的示例:
OriginalObject = {
names : [],
numbers : [],
dates :{
from: null,
to : null,
},
other :{
from: null,
to : null,
},
}
ModifiedObject = {
names : ['Steven', 'Judy'],
numbers : [1,5,7],
dates :{
from: 15152112512,
to : null,
},
other :{
from: null,
to : null,
},
}
由于姓名、编号和日期已更改,因此所需的输出为:3
我在想也许我可以遍历对象属性并使用 lodash 的 _.isEqual,但我想知道是否有一个简单的简写版本来实现这一点。
我用这个作为解决方案。
appliedFiltersCount (state) {
let changedCount = 0
Object.keys(state.filters).forEach((field) => {
if (field in state.filters && field in getDefaultState().filters) {
if (!isEqual(state.filters[field], getDefaultState().filters[field])) {
changedCount++
}
}
})
return changedCount
},
如果你想要一个使用lodash的解决方案,你可以应用_.toPairs()
on both of your objects. Then use _.differenceWith()
来比较获得的数组,最后得到比较数组的长度:
OriginalObject = {
names : [],
numbers : [],
dates :{
from: null,
to : null,
},
other :{
from: null,
to : null,
},
}
ModifiedObject = {
names : ['Steven', 'Judy'],
numbers : [1,5,7],
dates :{
from: 15152112512,
to : null,
},
other :{
from: null,
to : null,
},
}
console.log(_.differenceWith(_.toPairs(OriginalObject), _.toPairs(ModifiedObject), _.isEqual).length);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>