如何合并javascript数组并按位置排序
How to merging javascript arrays and order by position?
是否可以通过按索引/位置排序来合并javascript中的数组。我正在努力做到这一点,但还没有找到任何这样的例子。
var array1 = [1,2,3,4]
var array2 = [a,b,c,d]
var array3 = [!,@,#,$]
var merged array = [1,a,!,2,b,@,3,c,#,4,d,$]
我知道你可以用concat()把一个放在另一个后面。
只要数组的长度都一样,你就可以做:
var mergedArray = [];
for (var i = 0, il = array1.length; i < il; i++) {
mergedArray.push(array1[i]);
mergedArray.push(array2[i]);
mergedArray.push(array3[i]);
}
编辑:对于不同长度的阵列,您可以执行以下操作:
var mergedArray = [];
for (var i = 0, il = Math.max(array1.length, array2.length, array3.length);
i < il; i++) {
if (array1[i]) { mergedArray.push(array1[i]); }
if (array2[i]) { mergedArray.push(array2[i]); }
if (array3[i]) { mergedArray.push(array3[i]); }
}
这应该适用于任何长度的数组:
var mergeArrays = function () {
var arr = [],
args = arr.slice.call(arguments),
length = 0;
for (var i = 0, len = args.length; i < len; i++) {
length = args[i].length > length ? args[i].length : length;
}
for (i = 0; i < length; i++) {
for (var j = 0; j < len; j++) {
var value = args[j][i];
if (value) {
arr.push(value);
}
}
}
return arr;
};
示例:
var array1 = [1,2,3,4];
var array2 = ['a','b','c','d','e','f','g','h','i','j','k','l'];
var array3 = ['!','@','#','$','%','^','&','*','('];
mergeArrays(array1, array2, array3);
// outputs: [1, "a", "!", 2, "b", "@", 3, "c", "#", 4, "d", "$", "e", "%", "f", "^", "g", "&", "h", "*", "i", "(", "j", "k", "l"]
这也可以(稍微简洁一点的语法):
var mergeArrays = function () {
var arr = [],
args = arr.slice.call(arguments),
length = Math.max.apply(null, args.map(function (a) { return a.length; }));
for (i = 0; i < length; i++) {
for (var j = 0, len = args.length; j < len; j++) {
var value = args[j][i];
if (value) {
arr.push(value);
}
}
}
return arr;
};
对于大小相同的数组,将一个或多个数组作为参数进行合并:
function merge()
{
var result = [];
for (var i=0; i<arguments[0].length; i++)
{
for (var j=0; j<arguments.length; j++)
{
result.push(arguments[j][i]);
}
}
return result;
}
var array1 = ['1','2','3','4'];
var array2 = ['a','b','c','d'];
var array3 = ['!','@','#','$'];
var merged = merge(array1, array2, array3);
没有内置,但管理起来并不困难:
var maxLength = Math.max(array1.length, array2.length, array3.length),
output = [];
for (var i = 0; i < maxLength; i++) {
if (array1[i] != undefined) output.push(array1[i]);
if (array2[i] != undefined) output.push(array2[i]);
if (array3[i] != undefined) output.push(array3[i]);
}
试试这个。。。
var masterList = new Array();
var array1 = [1,2,3,4];
var array2 = [a,b,c,d];
var array3 = [!,@,#,$];
for(i = 0; i < array1.length; i++) {
masterList.push(array1[i]);
masterList.push(array2[i]);
masterList.push(array3[i]);
}
看起来你想把一些相同长度的数组"压缩"成一个数组:
var zip = function() {
var numArrays=arguments.length
, len=arguments[0].length
, arr=[], i, j;
for (i=0; i<len; i++) {
for (j=0; j<numArrays; j++) {
arr.push(arguments[j][i]);
}
}
return arr;
};
zip([1,2], ['a', 'b']); // => [1, 'a', 2, 'b']
zip([1,2,3], ['a','b','c'], ['!','@','#']); // => [1,'a','@',...,3,'c','#']
如果输入数组的长度可能不同,那么你必须弄清楚如何处理这种情况。。。
是的,有一些方法可以做到这一点。只是:
- 循环通过较大的阵列
- 直到在当前处理的位置两个阵列都具有元素、将它们逐一分配给新阵列
- 在较短的阵列结束之后仅分配来自较长阵列的元素
生成的数组将按照原始数组中的索引对元素进行排序。根据您的决定,其中一个数组的优先级将更高。
这适用于任何数量的数组和任何长度的数组。
函数myMerge(){var结果=[],maxLength=0;for(var i=0;i<arguments.length;i++){if(arguments[i].length>maxLength){maxLength=arguments[i].lengage;}}for(var i=0;i<maxLength;i++){for(var j=0;j<arguments.length;j++){if(arguments[j].length>i){result.prush(arguments[j][i]);}}}返回结果;}
伊莱在那里把我打得落花流水。
var posConcat = function() {
var arrays = Array.prototype.slice.call(arguments, 0),
newArray = [];
while(arrays.some(notEmpty)) {
for(var i = 0; i < arrays.length; i++) {
if(arguments[i].length > 0)
newArray.push(arguments[i].shift());
}
}
return newArray;
},
notEmpty = function() { return arguments[0].length > 0; };
用法:
var orderedArray = posConcat(array1,array2,array3);
样品:http://jsfiddle.net/HH9SR/
相关文章:
- 如何从某个位置顺时针和逆时针循环数组
- 将javascript数组中的项移动到特定位置的有效方法
- 生成ACF标记位置的数组(元素列表后缺少])
- 基于javascript中位置的数组差异
- Javascript删除数组中某个位置之后的项
- 在数组中迭代时的JS循环位置
- 在两个位置显示数组中的随机单词
- javascript递归,按数组位置查找子级
- 检查数组位置是否真的未定义
- 检查值存在于数组位置
- 在数组位置获取并设置cookie值
- 如何访问成员模板中的数组位置
- 递增数组位置
- 返回最低数字的数组位置(非负数)
- 我如何使一个按钮改变Javascript数组位置
- 我如何保存字符串的每个字母在不同的数组位置?并合并回单个字符串
- 下划线-比较两个对象数组(位置)
- for循环中的Ajax不会返回数组位置的正确值,尽管闭包绑定了当前值位置的范围
- 根据对象在Firebase中的数组位置检索对象
- 当使用x作为索引号时.要在函数中显示数组位置,数组返回undefined