合并两个有一定值的数组,在浏览器中崩溃
Combine two array that have some value, crash in browser
如果数组有一些值,我有一个组合数组的函数。这是我的阵列:
var emailAddr = [{
customerID : "C20061102105257_678",
emails : ["fandi@gmail.com", "fanjavaid@gmail.com"]
}];
var dataEmail2 = {
customerID : "C20061102105257_678",
emails : ["weisk@gmail.com"]
};
var dataEmail3 = {
customerID : "C20061102105257_600",
emails : ["eko@gmail.com"]
};
var dataEmail4 = {
customerID : "C20061102105257_678",
emails : ["1@gmail.com", "156@gmail.com"]
};
这是我的功能:
function addEmail(emailAddresses) {
if(emailAddr.length == 0) {
emailAddr.push(emailAddresses);
} else {
// Checking
for (var i = 0; i < emailAddr.length; i++) {
if (emailAddr[i].customerID == emailAddresses.customerID) {
for (var a = 0; a < emailAddresses.emails.length; a++) {
emailAddr[i]['emails'].push(emailAddresses.emails[a]);
}
} else {
emailAddr.push(emailAddresses);
}
}
}
} // End function
addEmail(dataEmail2);
addEmail(dataEmail3);
addEmail(dataEmail4);
console.log(emailAddr);
但当我在中执行else语句时,我的浏览器崩溃了
emailAddr.push(emailAddresses);
如何处理??非常感谢。
这可能会奏效。我想你正试图拥有一个唯一的客户ID数组,其中包含所有电子邮件。
function addEmail(emailAddresses) {
if(emailAddr.length == 0) {
emailAddr.push(emailAddresses);
} else {
// Checking
var tempCheck = true;
for (var i = 0; i < emailAddr.length; i++) {
if (emailAddr[i].customerID == emailAddresses.customerID) {
for (var a = 0; a < emailAddresses.emails.length; a++) {
emailAddr[i]['emails'].push(emailAddresses.emails[a]);
}
tempCheck = false;
}
}
if(tempCheck)
{
emailAddr.push(emailAddresses);
}
}
} // End function
这里有两个问题。
1-通过添加到当前正在读取的数组中,可以获得一个无限循环。这将导致它扩展,并且您将不断重复阅读此扩展。
2-你实际上并没有把新的对象推到你的数组中,你只是简单地添加了一个对现有对象的引用。这里将发生的情况是,当您添加到对象时,您也在添加到刚刚添加的对象中。换句话说,这里有另一个无限循环
for (var a = 0; a < emailAddresses.emails.length; a++) {
emailAddr[i]['emails'].push(emailAddresses.emails[a]);
}
因为当你推到你的数组时,你实际上是在推到引用,这意味着它也会无限扩展。要解决此问题,请使用.stice(0)来复制数组,如下所示。
var emailAddr = [{
customerID: "C20061102105257_678",
emails: ["fandi@gmail.com", "fanjavaid@gmail.com"]
}];
var dataEmail2 = {
customerID: "C20061102105257_678",
emails: ["weisk@gmail.com"]
};
var dataEmail3 = {
customerID: "C20061102105257_600",
emails: ["eko@gmail.com"]
};
var dataEmail4 = {
customerID: "C20061102105257_678",
emails: ["1@gmail.com", "156@gmail.com"]
};
function addEmail(emailAddresses) {
if (emailAddr.length == 0) {
emailAddr.push({ customerID: emailAddresses.customerID, emails: emailAddresses.emails.slice(0) });
} else {
// Checking
var success = false;
for (var i = 0; i < emailAddr.length; i++) {
if (emailAddr[i].customerID == emailAddresses.customerID) {
success = true;
for (var a = 0; a < emailAddresses.emails.length; a++) {
console.log("adding : " + emailAddresses.emails[a]);
emailAddr[i]['emails'].push(emailAddresses.emails[a]);
}
}
}
if (!success) {
emailAddr.push({ customerID: emailAddresses.customerID, emails: emailAddresses.emails.slice(0) });
}
}
} // End function
addEmail(dataEmail2);
addEmail(dataEmail3);
addEmail(dataEmail4);
console.log(emailAddr);
function addEmail(emailAddresses) {
if(emailAddr.length == 0) {
emailAddr.push(emailAddresses);
} else {
// Checking
for (var i = 0; i < emailAddr.length; i++) {
if (emailAddr[i].customerID == emailAddresses.customerID) {
for (var a = 0; a < emailAddresses.emails.length; a++) {
// emailAddr[a]['emails'].push(emailAddresses.emails[a]);
//replaced i with a on above line
//replaced i with a on above line
emailAddr[a]['emails'].push(emailAddresses.emails[a]);
}
} else {
emailAddr.push(emailAddresses);
}
}
}
} // End function
addEmail(dataEmail2);
addEmail(dataEmail3);
addEmail(dataEmail4);
console.log(emailAddr);
相关文章:
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 如何在浏览器窗口底部的直线上绘制圆圈数组
- navigator.plugins如何查找并返回安装在web浏览器上的插件对象数组
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 从数组空值到浏览器刷新的 Javascript 变量
- JavaScript 数组中元素的最大数量.浏览器不允许超过 1000 个元素
- 在 javascript 跨浏览器中过滤数组
- 谷歌浏览器中数组的未知/不一致的排序行为
- 使用新值循环 2000 个元素的数组时,浏览器更新元素需要很长时间
- 由于数组大小,Javascript 主要浏览器的内存不足
- 如何从IE和Chrome浏览器中的显示模式对话框窗口返回数组对象
- 如果我在数组前面加上 ng-repeat,除非我更改浏览器窗口,否则$apply不会呈现 ng-repeat
- Javascript数组中的图像URL会自动预加载到浏览器中吗?
- 合并两个有一定值的数组,在浏览器中崩溃
- 为什么浏览器在json响应和json数组长度中添加额外的后向斜杠是错误的
- 使用ajax将数组数据从浏览器中的javascript传递到springmvc控制器
- 我怎么能处理巨大的javascript数组(数组的20万个坐标)在浏览器端有效
- 数组推送功能不工作在谷歌浏览器
- 浏览器崩溃-复选框数组Ajax (PHP)
- javascript数组推送错误在Safari浏览器