Javascript 组合数组或字符串
2010-10-26
1019
我有以下动态生成的字符串:
var stringA = ["a1", "a2", "a3" ... 'a400' ... 'a600']; // length 600
var stringB = ["b1", "b2", "b3" ... 'b400']; // length 400
如何获取像这样组合的数组或字符串:
var myString = ["a1b1", "a2b2", "a3b3" ... "a400b400", "a401" ... "a600"]
3个回答
您可以这样做:
var result = [], len = Math.max(stringA.length, stringB.length);
for(var i=0; i < len; i++) {
result.push((stringA[i] || "") + (stringB[i] || ""));
}
您可以在此处测试
,
|| ""
是为了防止在较短的数组上将
undefined
作为字符串获取。
Math.max()
调用是为了允许
A
或
B
更长,它将迭代到任一者的末尾,就像问题中的
A
更长一样。
Nick Craver
2010-10-26
我不认为
Array
对象中内置了可以为您完成此操作的任何东西,您必须执行循环。但是,循环很简单:
var index, length;
var result = [];
// assertion: arrayA.length === arrayB.length
result.length = arrayA.length; // Helps performance in some implemenations, harmless in others
for (index = 0, length = arrayA.length; index < length; ++index) {
result[index] = arrayA[index] + arrayB[index];
}
(我已重命名
stringA
->
arrayA
和
stringB
->
arrayB
以避免混淆。)
如果数组的长度不同 或 数组中的某些条目未定义(这是完全可能的,JavaScript 数组是稀疏的),您需要在循环中处理它,例如:
var index, length, Apresent, Bpresent;
var result = [];
result.length = Math.max(arrayA.length, arrayB.length); // Helps performance in some implementations, harmless in others
for (index = 0, length = result.length; index < length; ++index) {
Apresent = arrayA.hasOwnProperty(index);
Bpresent = arrayB.hasOwnProperty(index);
if (Apresent && Bpresent) {
result[index] = arrayA[index] + arrayB[index];
}
else if (Apresent) {
result[index] = arrayA[index];
}
else if (Bpresent) {
result[index] = arrayB[index];
}
}
如果数组是稀疏的,并且它们恰好在同一索引处是稀疏的,则生成的数组也将是稀疏的。
T.J. Crowder
2010-10-26
如果您不需要保留原始 2 个数组中的项目,那么下面的代码效果非常好。它对 for 循环中的迭代次数没有预先确定的限制,这意味着
stringA
和
StringB
数组的大小可能会在代码运行时继续增长。
var myString = [];
for(var answer; answer = (stringA.shift() || "") + (stringB.shift() || "");) {
myString.push(answer);
}
Eric
2010-10-26