JavaScript 循环关闭问题
JavaScript for loop closure issue
如果它们存在于 result
的选定类别中,我会在将它们勾选为 true 后添加所有类别,但它会将以前的类别结果与当前类别的结果结合起来。我试过关闭,但它没有给我新的对象。 查看 fiddle。
var allCatsResult = [{"id":1},{"id":2}, {"id":3}, ... ];
var catsArray = [1, 2] // Array of ids from allCatsResult
var result = [
{"id":1, selectedCategories:[{"id":1},{"id":2}]},
{"id":2, selectedCategories:[{"id":4},{"id":5}]},
...
];
for (var i = 0; i < results.length; i++) {
var tmp = allCatsResult; // tried to add function form here didn't work
for (var k = 0; k < results[i].selectedCategories.length; k++) {
var index = catsArray.indexOf(results[i].selectedCategories[k].category_id);
if(index !== -1) {
tmp[index].ticked = true;
}
}
results[i].categories = tmp;
}
以上代码给出了每个结果中所有类别的 ticked = true 的组合结果。
您需要 copy/clone 对象数组,否则您正在操纵原始对象。显然有几种方法。我选择了以下:
var tmp = JSON.parse(JSON.stringify(allCatsResult));
这将在 tmp
中创建一个新的对象数组,并且它只会正确地修改克隆。
如果它们存在于 result
的选定类别中,我会在将它们勾选为 true 后添加所有类别,但它会将以前的类别结果与当前类别的结果结合起来。我试过关闭,但它没有给我新的对象。 查看 fiddle。
var allCatsResult = [{"id":1},{"id":2}, {"id":3}, ... ];
var catsArray = [1, 2] // Array of ids from allCatsResult
var result = [
{"id":1, selectedCategories:[{"id":1},{"id":2}]},
{"id":2, selectedCategories:[{"id":4},{"id":5}]},
...
];
for (var i = 0; i < results.length; i++) {
var tmp = allCatsResult; // tried to add function form here didn't work
for (var k = 0; k < results[i].selectedCategories.length; k++) {
var index = catsArray.indexOf(results[i].selectedCategories[k].category_id);
if(index !== -1) {
tmp[index].ticked = true;
}
}
results[i].categories = tmp;
}
以上代码给出了每个结果中所有类别的 ticked = true 的组合结果。
您需要 copy/clone 对象数组,否则您正在操纵原始对象。显然有几种方法。我选择了以下:
var tmp = JSON.parse(JSON.stringify(allCatsResult));
这将在 tmp
中创建一个新的对象数组,并且它只会正确地修改克隆。