【发布时间】:2015-12-25 17:08:42
【问题描述】:
我设置了两个全局变量:
var topList = {
a: {},
b: {},
c: {},
d: {},
e: {}
}
var compare = {
a: {},
b: {},
c: {},
d: {},
e: {}
}
我有一个函数填充它们中的每一个,然后使用 for 循环换出 compare 变量中的 a 对象。然后它调用一个函数将新的compare 与topList 进行比较,并返回两者中较好的一个(因此将topList 设置为两者中较好的一个:
function optimize(data){
var rawList = data.slice();
var aList = $.grep(rawList, function(e) { return e.position == "A" });
var bList = $.grep(rawList, function(e) { return e.position == "B" });
var cList = $.grep(rawList, function(e) { return e.position == "C" });
var dList = $.grep(rawList, function(e) { return e.position == "D" });
var eList = $.grep(rawList, function(e) { return e.position == "E" });
topList.a = aList[0];
topList.b = bList[0];
topList.c = cList[0];
topList.d = dList[0];
topList.e = eList[0];
compare = topList;
for (i = 0, len = aList.length; i < len; i++) {
compare.a = aList[i];
topList = best(topList, compare);
}
}
由于某种原因,似乎在执行compare.a = aList[i]; 行时,不仅换出了compare 变量中的a 对象,还换出了topList 变量中的a 对象。结果,我总是通过我的“最佳”功能发送两个相同的列表,这使它毫无用处。
我是新手。任何帮助将不胜感激!
【问题讨论】:
-
$.grep在做什么? -
compare是对topList的引用吗?例如当您在开发者控制台中运行compare === topList时,它的计算结果是true吗? -
如果这是 jQuery 请标记为这样。
-
@NinaScholz 我正在使用 $.grep 过滤数组。 api.jquery.com/jquery.grep
标签: javascript for-loop