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 中创建一个新的对象数组,并且它只会正确地修改克隆。