将对象压入数组会擦除而不是添加
Pushing object into array erases instead of adding
我有一个这样的函数:
$scope.saveSearch = function () {
var alreadyExist = false;
for (var i = 0; i < $scope.savedSearch.length; i++) {
if (JSON.stringify($scope.searched) === JSON.stringify($scope.savedSearch[i])) {
alreadyExist = true;
break;
}
}
if (!alreadyExist) {
$scope.savedSearch.push($scope.searched);
localStorage.setItem("savedSearch", JSON.stringify($scope.savedSearch));
}
};
之前:$scope.savedSearch = [];
$scope.searched = {
IS: "",
area: "",
block: "",
type: "",
level: ""
};
$scope.searched
对象中的值由用户初始化后修改。
我的问题是:$scope.savedSearch
总是只包含最后一个被推入的对象。它不是将对象添加到数组中,而是替换当前对象。
我不明白为什么。
您需要将您的push行更改为:
$scope.savedSearch.push(angular.copy($scope.searched));
我认为你的问题是对象是通过引用传递的。由于savedSearch中的对象总是指向您正在搜索的对象,因此alreadyExist将始终为true。
我猜是对象引用被存储在数组中,而不是实际对象本身。因此,任何后续将对象推入数组的调用都将无法工作,因为对象引用已经存在于数组中。它只是更新了。
试试这个。使用angular.copy()
创建对象的深度副本,并将副本推入数组。看看是否可以。
if (!alreadyExist) {
$scope.savedSearch.push(angular.copy($scope.searched));
localStorage.setItem("savedSearch", JSON.stringify($scope.savedSearch));
}
你将对象推入for语句之外所以只有一个元素被推入试着将它移到for语句中并且所有不存在的对象都将被推入
$scope.saveSearch = function () {
var alreadyExist = false;
for (var i = 0; i < $scope.savedSearch.length; i++) {
if (JSON.stringify($scope.searched) === JSON.stringify($scope.savedSearch[i])) {
alreadyExist = true;
break;
}
if (!alreadyExist) {
$scope.savedSearch.push($scope.searched);
localStorage.setItem("savedSearch", JSON.stringify($scope.savedSearch));
}
}
};
更简单的方法是直接
$scope.saveSearch = function () {
var alreadyExist = false;
for (var i = 0; i < $scope.savedSearch.length; i++) {
if (JSON.stringify($scope.searched) != JSON.stringify($scope.savedSearch[i])) {
$scope.savedSearch.push($scope.searched);
localStorage.setItem("savedSearch", JSON.stringify($scope.savedSearch));
}else{
break
}
}
};
相关文章:
- HTML画布在绘图后立即擦除矩形
- 为什么缩放按钮不会显示在照片擦除中
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 应用程序脚本中导入HTML的数据擦除;谷歌表格
- 正在擦除要重新显示的单元格
- 通过python擦除Vine数据
- 擦除单元格问题
- 尝试擦除时删除输入中的零
- 擦除画布中的矩形,但它们会回来
- 如何使用 javascript 向我的 html 添加内容而不擦除整个页面
- Javascript用光标擦除图像
- 停止Angular JS ng视图擦除页面
- 为什么Jquery UI会擦除我的输入框
- HtmlWebpackPlugin擦除模板分区
- angular ng类将类添加到除当前类之外的所有类
- 内部 HTML 在添加多个文本框时擦除该值
- 使用Javascript添加文本字段,但值不断擦除
- 试图附加html,但函数一直在擦除“;流派;当我想添加“;亚属”;
- 擦除/清除文本区域后,我不能再向其添加文本
- 将对象压入数组会擦除而不是添加