我想将数据发送到没有现有数据的数组。这里是 代码。
result.then(function (speaker) { //getting response from the modal
var speakerdatanew = {_id: speaker._id, name: speaker.name, email: speaker.email};
if ($scope.speakerdata.indexOf(speakerdatanew._id) === -1) {
$scope.speakerdata.push(speakerdatanew);
console.log($scope.speakerdata);
} else {
alert("You have already added speaker");
}
});
它不断多次添加相同的数据。
答案 0 :(得分:0)
您可以使用array.find方法按_id
if (!$scope.speakerdata.find(function(s) { return s._id === speakerdatanew._id)) {
$scope.speakerdata.push(speakerdatanew);
console.log($scope.speakerdata);
}
答案 1 :(得分:0)
对象数组略有不同。这是非AngularJS,只是简单的JavaScript。
function myIndexOf(myArray, searchTerm, property) {
for (var i = 0; i < myArray.length; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
用法
if(myIndexOf($scope.speakerdata, speakerdatanew , "_id")===-1){
还有其他选择,但这是一个简单的例子。
注意我自私地将这个从我创建的另一个答案中拉出来,该答案包含删除对象,查找,lookupall以及指向更复杂的链接的示例。 Multidimensional array vs array of objects
在某些时候,可能会使用库或调查这些选项,尽管这些可以在旧浏览器中使用 - 我在那些必须支持这些浏览器的旧浏览器中进行了一些性能测试。
答案 2 :(得分:0)
这个问题陈述有很多可能的答案,但我采用了更简单的方法,我可以在检查对象是否存在的每一步执行不同的操作。下面是您问题的示例片段。
您甚至可以使用angular.forEach
来迭代列表
angular.forEach($scope.speakerdata, function(val, key) {
});
但是没有中断或继续关键字的设施,所以我没有使用。
.result.then(function (speaker) { //getting response from the modal
var speakerdatanew = {
_id: speaker._id,
name: speaker.name,
email: speaker.email
};
var alreadyPresent = false;
for (var i = 0; i < $scope.speakerdata.length; i++) {
var speakerData = $scope.speakerdata[i];
if (speakerData._id == speakerdatanew._id) {
alreadyPresent = true;
break;
} else {
}
}
if (alreadyPresent) {
alert("You have already added speaker");
} else {
$scope.speakerdata.push(speakerdatanew);
console.log($scope.speakerdata);
}