【发布时间】:2017-04-10 05:11:59
【问题描述】:
我在 Angularjs 中有两个 JavaScript objects。他们都有相同的keys,但不同的values。看起来像这样:
$scope.object1 = {
name: 'Arpit',
roll_no: 999, // Number
creation_date: '2017-04-10T04:44:21.923Z', // date value but string
joining_date: '2017-03-30T18:30:00.000Z' // date value but string
}
第二个对象是:
$scope.object2 = {
name: 'Arpit1',
roll_no: '999', // Number but string
creation_date: 2017-04-10T04:44:21.923Z, // date value not string
joining_date: 2017-03-30T18:30:00.000Z // date value not string
}
现在我想比较这个对象并检测不同的值。
相比之下,999 应该等于 '999','2017-03-30T18:30:00.000Z' 应该等于 2017-03-30T18:30:00.000Z,以此类推。
挑战
日期和数字的值可能是字符串格式,所以首先我需要检测给定的字符串是日期还是数字,然后进行比较。
我的代码
var data = {
options:{
data: $scope.object1
},
newData: $scope.object2
}
angular.forEach(data.options.data, function (value, key) {
//compare fields
if (data.newData[key] != data.options.data[key]) {
if (filedsToSkip.indexOf(key) == -1) {
if ((angular.isDate(data.newData[key]) || angular.isDate(data.options.data[key])) && new Date(data.newData[key]) != new Date(data.options.data[key])) {
$ctrl.updatedFields.push({
field: key,
newValue: data.newData[key],
oldValue: data.options.data[key]
});
}
} else {
console.log("Field skipped");
}
}
});
但是这段代码不能正常工作。请给点建议。
谢谢。
编辑
现在,当我运行此代码时,它显示所有字段都不同,但我希望它只显示 name 不同。
【问题讨论】:
-
我不确定这是否会导致问题。在第 15 行(大 if 条件)中,当
isDate对其中一个值为假而对另一个值为真时会发生什么?在这种情况下,条件的第一部分似乎为真,第二部分也可能为真,因为Date也可以返回一个数字的有效结果(例如new Date("2017")) -
如果您指定什么不能正常工作会有所帮助,即预期输出是什么以及您的代码输出与此有何不同。
-
另外,您为
if和else if执行的块完全相同。 -
我面临同样的问题。这是说
2017-03-30T18:30:00.000Z不等于"2017-03-30T18:30:00.000Z"。 -
您可以尝试的另一件事是使用正则表达式来验证日期(特别是如果它们是 Unix 格式)并继续使用其余代码。例如,请参阅here。
标签: javascript angularjs date object numbers