gpt4 book ai didi

javascript - 在 Javascript 中迭代对象数组

转载 作者:行者123 更新时间:2023-12-03 02:52:09 25 4
gpt4 key购买 nike

我正在使用 angularjs。我有一个选择框。在选择中,我通过执行 ng-repeat 来显示所有练习名称,其中可以选择多个练习名称。

这是我的HTML

<div class="form-group">
<label for="exampleInputEmail1">Selct Exercises</label>
<select class="form-control select2" multiple>
<option data-ng-repeat="exercise in exercises" value="
{{exercise}}" data-ng-checked="selection.indexOf(exercise) > -1" data-ng-click="toggleSelectionExercise(exercise)">
{{exercise.name}}</option>
</select>
</div>

现在,在 onclick 选择多个练习名称后,我正在调用此函数

Controller.js

$scope.parameterTest = [];
$scope.parameter1 = [];
var exercise = [];
$scope.toggleSelectionExercise = function
toggleSelection(exercise) {
var idx = $scope.parameterTest.indexOf(exercise);
if (idx > -1) {
$scope.parameterTest.splice(idx, 1);
} else {
console.log(exercise);
$scope.parameterTest.push(exercise);
for (var i = 0; i < $scope.parameterTest.length; i++) {
var parameter1 = {
"exid": exercise._id,
"modify": 0,
"sets": exercise.sets,
"reps": exercise.reps,
"rest_duration": 60,
"ord": 0
};
/*Setting in json format and storing in parameter1*/
$scope.parameterTest[i] = parameter1;
/*parameter1 value passing to $scope.parameterTest[i]*/
console.log($scope.parameterTest[i]);
}
}
}

我将练习对象传递给函数。我从练习对象中设置值并以 JSON 格式传递并将其存储在变量 parameter1 中。

我想将下拉列表中选择的每个对象设置为这种格式,这就是我迭代每个对象并设置格式和值的原因。

但是现在,如果我从下拉列表中选择一个选项,它会显示该对象并设置正确的值和格式。但是如果我选择多个选项,那么对于 2 个选项,它会显示如下

以 JSON 格式设置的第一个对象值
对象 {exid: "59bc2dbc53bdcb7171732eab", 修改: 0, 组数: 3, 代表: Array[6], rest_duration: 60…}

以 JSON 格式设置的第二个对象值对象 {exid: "59bc2d9453bdcb7171732eaa", 修改: 0, 组数: 3, 代表: Array[6], rest_duration: 60…}

第二个选项显示第二次对象 {exid: "59bc2d9453bdcb7171732eaa", 修改: 0, 组数: 3, 代表: Array[6], rest_duration: 60…}

如果我选择两个选项,它将显示第一个对象一次,第二个对象显示两次。

我不知道我哪里做错了。我的循环正确吗?

最佳答案

可能你所做的事情是错误的。

JSfiddle用于工作示例代码

我对“else” block 中的代码有点困惑,在该代码块中将“exercise”对象推送到“$scope.parameterTest”数组,然后迭代并将从同一“exercise”对象获得的不同对象分配给“$scope.parameterTest”数组。

我认为您在“$scope.parameterTest”中检查现有“exercise”对象的位置是错误的,因为您更改了保存在中的“exercise”对象分配“parameter1”值的“$scope.parameterTest”。

$scope.parameterTest[i] = parameter1;

如果您确实需要修改练习对象,请更改

var idx = $scope.parameterTest.indexOf(exercise);

var exerciseItemFoundInArray = false;
var exerciseItemFoundIndex = -1;
for(var i = 0; i < $scope.parameterTest.length; i++) {
if ($scope.parameterTest[i].exid == exercise._id) {
exerciseItemFoundInArray = true;
exerciseItemFoundIndex = i;
break;
}
}

if (exerciseItemFoundInArray == true && exerciseItemFoundIndex != -1)
{
$scope.parameterTest.splice(idx, 1);
}

或者查找下面的索引,大多数浏览器(IE - 12、Chrome 45 等)都支持此功能

var idx = $scope.parameterTest.findindex((item)=> {return item.exid == exercise._id});

我已经删除了你的“for”循环,因为它是不必要的。函数“toggleExerciseSelection”的修改代码

$scope.toggleSelectionExercise = function
toggleSelection(exercise) {
var exerciseItemFoundInArray = false;
var exerciseItemFoundIndex = -1;
for(var i = 0; i < $scope.parameterTest.length; i++) {
if ($scope.parameterTest[i].exid == exercise._id) {
exerciseItemFoundInArray = true;
exerciseItemFoundIndex = i;
break;
}
}

if (exerciseItemFoundInArray == true && exerciseItemFoundIndex != -1)
{
$scope.parameterTest.splice(exerciseItemFoundIndex, 1);
console.log( $scope.parameterTest);
} else {
var parameter1 = {
"exid": exercise._id,
"modify": 0,
"sets": exercise.sets,
"reps": exercise.reps,
"rest_duration": 60,
"ord": 0
};
$scope.parameterTest.push(parameter1);
console.log( $scope.parameterTest);
}
};

关于javascript - 在 Javascript 中迭代对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com