我使用 angularJS,并且有 2 个数组,如下所示
$scope.varStr = [{"subjectId":"1","subjectShortName":"English"},
{"subjectId":"2","subjectShortName":"French"},
{"subjectId":"3","subjectShortName":"German"},
{"subjectId":"4","subjectShortName":"Latin"},
{"subjectId":"5","subjectShortName":"English-Aus"}
];
$scope.varStr2 = [{"subjectId":"1","subjectShortName":"English"},
{"subjectId":"5","subjectShortName":"English-Aus"}
];
$scope.varStr2 中相似值 subjectId 的基础,更新 $scope.varStr 或使用新 KEY 创建新的 $scope.varStr3,如下所示 "IsSelected": true/false
$scope.varStr3 = [{"subjectId":"1","subjectShortName":"English","IsSelected": true},
{"subjectId":"2","subjectShortName":"French","IsSelected": false},
{"subjectId":"3","subjectShortName":"German","IsSelected": false},
{"subjectId":"4","subjectShortName":"Latin","IsSelected": false},
{"subjectId":"5","subjectShortName":"English-Aus","IsSelected": true}
];
for (var index = 0; index < varStr.length; index++) {
if (varStr[index].subjectId == varStr2[index].subjectId) {
varStr.push("'IsSelected':'true'");
}
}
最佳答案
你的代码中有很多问题,而且都是非常基础的问题,所以我建议修改你的算法和 JavaScript 基础知识。我会尽力解释,但这不能取代阅读一本好书和练习。
让我们检查一下您的代码:
for (var index = 0; index < varStr.length; index++) {
if (varStr[index].subjectId == varStr2[index].subjectId) {
varStr.push("'IsSelected':'true'");
}
}
这里存在三个重要问题:
- 您假设
varStr
和varStr2
中的匹配对象位于同一索引处。但事实并非如此。例如,subjectId=5
的对象在第一个数组中位于索引 4 处,但在第二个数组中位于索引 1 处。所以这是不正确的。对于varStr
的每个元素,您需要做的是测试varStr2
中的任何位置是否存在具有相同 subjectId 的对象
- 您的目标是更新
varStr
中的对象。但这不是您正在做的:您正在将新元素推送(即添加)到varStr
。 varStr
包含您需要更新的对象,但您添加到数组中的不是对象。这是一个字符串。
这是详细的固定算法:
function update(varStr, varStr2) {
for (var index = 0; index < varStr.length; index++) {
var currentObject = varStr[i];
var currrentSubjectId = currentObject.subjectId;
currentObject.isSelected = existsObjectWithGivenSubjectId(currentSubjectId, varStr2);
}
}
function existsObjectWithGivenSubjectId(subjectId, array) {
for (var i = 0; i < array.length; i++) {
if (array[i].subjectId === subjectId) {
return true;
}
}
return false;
}
现在,应该使用数组函数以更短的方式编写,但在采用这种方式之前您应该首先了解该版本。
您还应该为变量选择更好的名称。将它们命名为 varXxx
是没有用的。变量就是变量,var
不需要出现在其名称中。您将它们命名为 varStr,这表明它们是字符串类型,这是不正确的:它们是对象数组。而且你的变量名并不能说明它们包含什么。例如,您的变量可以命名为 originalSubjects
和 selectedSubjects
。
最后,将所有对象键括在引号中会使代码的可读性降低。使用字符串作为 subjectId 也很奇怪,因为它们看起来是整数。您可以使用以下代码代替:
$scope.varStr = [
{
subjectId: 1,
subjectShortName: "English"
},
{
subjectId: 2,
subjectShortName: "French"
}...
];
关于javascript - angularJS更新第二个数组值的数组基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34555597/