我的编码日很糟糕。我根本不明白为什么this code on fiddle没有做我期望的事情。
var masterList = new Array();
var templates = new Array();
templates.push({"name":"name 1", "value":"1234"});
templates.push({"name":"name 2", "value":"2345"});
templates.push({"name":"name 3", "value":"3456"});
templates.push({"name":"name 4", "value":"4567"});
templates.push({"name":"name 1", "value":"5678"});
templates.push({"name":"name 2", "value":"6789"});
templates.push({"name":"name 3", "value":"7890"});
templates.push({"name":"name 4", "value":"8901"});
var addUnique = function(thatObj) {
var newList = new Array();
if ( masterList.length == 0 ) {
// add the first element and return
masterList.push(thatObj);
return;
}
for (j=0; j<masterList.length; j++) {
if (masterList[j].name != thatObj.name) {
newList.push(thatObj);
}
}
// store the new master list
masterList = newList.splice(0);
}
for (i=0; i<8; i++) {
addUnique(templates[i]);
}
console.log(masterList);
console.log(masterList.length);
在我的(谦逊)意见中,它应该通过templates数组,用templateArray的每个元素填充masterList,但只在master数组中产生4个元素,因为命名相同的元素应该被“覆盖” “,即不复制到中间阵列中,因此不进行新的替换。相反,我在masterList中获得了一个条目。
过去的好日子已经过去了,强类型语言。指针。叹。我只是不知道javascript正在制造什么样的混乱(好吧,我当然弄得一团糟)但是我责怪JS不了解我...
答案 0 :(得分:2)
newList
的范围限定为addUnique
函数,您可以在循环中调用8次。每次运行此函数时,都会为masterList(masterList = newList.splice(0);
)分配一个新值,因此只有最后一个值显示在console.log(masterList)
中。
以下是您的小提琴的固定版本:http://jsfiddle.net/vZNKb/2/
var addUnique = function(thatObj) {
if ( masterList.length == 0 ) {
// add the first element and return
masterList.push(thatObj);
return;
}
var exists = false;
for (var j = 0; j < masterList.length; j++) {
if (masterList[j].name == thatObj.name) {
exists = true;
break;
}
}
if (!exists) {
masterList.push(thatObj);
}
}
答案 1 :(得分:0)
你addUnique
中的循环需要先遍历所有元素...然后添加,如果没有元素匹配
相关部分
var matchingRecord = false;
for(j=0;j<masterList.length;j++) {
if (masterList[j].name == thatObj.name){
matchingRecord = true;
break;
}
}
if(!matchingRecord) newList.push(thatObj);