У меня есть следующий объект
0: {Dep_key: 1, sex: 2, dep: "HR department", Staff_name: "Hassan",
Staff_Key: 782, …}
1: {Dep_key: 1, sex: 2, dep: "sales department", Staff_name: "Ahmed",
Staff_Key: 813, …}
2: {Dep_key: 1, sex: 2, dep: "Marketing", Staff_name: "Hossam",
Staff_Key: 817, …}
и я хочу вставить уникальные значения Dep_key (s) в массив.
Что я сделал
$scope.leftdept = function (m) {
console.info(m);
for (i = 0; i < m.length; i++) {
if ($scope.depts.indexOf(m[i].Dep_key) === -1) {
$scope.depts.push(m[i].Dep_key);
}
else {
var index = $scope.depts.indexOf(m);
$scope.depts.splice(index, 1);
}
}
console.info($scope.depts);
}
но мой код не вставляет все Dep_key. Любая помощь, пожалуйста?
Спасибо
спасибо за ответ, я отредактировал вопрос и поделился им в начале



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вам нужен только уникальный Dep_key, вы можете удалить блок else
Вы вставляете «новый» Dep_key в свой блок if в первый раз, когда он появляется, но затем, если тот же Dep_key присутствует в цикле, в предложении else вы его удаляете. Когда у вас есть 2 Dep_key в вашем массиве, вы никогда не получите их на выходе. Кроме того, вы получаете var index = $scope.depts.indexOf(m); для массива m вместо m[i], но, как я уже сказал, у вас может быть только if, и код должен работать
$scope.leftdept = function (m) {
console.info(m);
for (i = 0; i < m.length; i++) {
if ($scope.depts.indexOf(m[i].Dep_key) === -1) {
$scope.depts.push(m[i].Dep_key);
}
}
console.info($scope.depts);
}
Спасибо большое, работает нормально. У меня просто вопрос, а что, если конечный пользователь хочет снять отметку с отдела, как я могу удалить его из толкаемого массива, большое спасибо
У меня нет полного кода передо мной, но я рекомендую вам в этом случае создать специальную функцию и использовать что-то вроде $scope.depts.slice(index,1), где index должен быть тем, который соответствует непроверенному. Не забудьте отметить вопрос как ответ, если он вас устраивает. Спасибо
можешь поделиться логами этого
console.info(m);