【发布时间】:2017-08-10 18:53:12
【问题描述】:
我正在尝试检查一个对象是否已经在一个数组中,在这里遵循这个答案:How to determine if object is in array
我根据自己的需要调整了功能,现在看起来是这样的:
var _createDatesArray, _objInArray;
_objInArray = function(array, obj) {
var i;
i = 0;
while (i < array.length) {
console.log("array[i] == obj is ", array[i] === obj, " array[i] is ", array[i], " and obj is ", obj);
if (array[i] === obj) {
return true;
}
i++;
}
};
_createDatesArray = function(val) {
var result;
if (val != null) {
result = {
text: val
};
if (!_objInArray(scope.datesQuestion.dates, result)) {
scope.datesQuestion.dates.push(result);
}
return console.log(scope.datesQuestion.dates);
}
};
我需要做的,基本上就是看看对象是否已经在数组中,如果是,则返回true。
调试时,控制台日志的结果如下:
array[i] == obj 为 false array[i] 为 {text: "10/08/17"} 且 obj 为 {文本:“2017 年 10 月 8 日”}
函数说它们不同 (array[i] == obj is false) 但在我看来它们是一样的。
我还检查了两者的类型,是这样的:
typeof array[i] is "object"
typeof obj is "object"
你能帮我解决这个问题吗?为什么它们不同?有什么不同?
_createDatesArray 在我的 Angular 应用程序的 $scope 基于 ng-model 更改其值时被调用,但我认为这无关紧要
【问题讨论】:
-
两个对象只有当它们是同一个对象(不同的引用)时才相等。检查
{a: 'a'} === {a: 'a'}=> 错误。
标签: javascript angularjs arrays