У меня 4 массива, я хотел бы объединить их в 1. Я могу это сделать, но я хотел бы взять один элемент из каждого массива, подтолкнуть его к новому массиву, а затем получить следующие 4 и так далее. Это то, что я получил:
var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ];
var b = [ 1, 2, 3, 4, 5, 6];
var c=["a","b","c","d","e","f"];
var d=[7,8,9,10,11,12]
var neat=[];
neat= a.concat(b, c,d);
//neat=["foo","bar","baz","bam","bun","fun",1,2,3,4,5,6,"a","b","c","d","e","f",7,8,9,10,11, 12]
Результат, который я хочу, будет примерно таким:
//neat=["foo",1,"a",7,"bar",2,"b",8...]
Я не уверен, будет ли цикл работать, или если мне нужно использовать другую функцию
Пожалуйста, попробуйте приведенный ниже код:
var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ];
var b = [ 1, 2, 3, 4, 5, 6];
var c=["a","b","c","d","e","f"];
var d=[7,8,9,10,11,12]
var neat=[];
//neat= a.concat(b, c,d);
//neat=["foo","bar","baz","b
for (var i = 0; i < a.length ; i++)
{
neat.push(a[i], b[i], c[i], d[i]);
}
console.log(neat);
Предполагая, что каждый массив источников имеет одинаковую длину:
a.forEach((e, i) => {
neat.push(e, b[i], c[i], d[i]);
};
Хотя ответ Justins правильный, однако, если длины массива не одинаковы каждый раз, вы можете сделать
var maxItems = Math.max(a.length,b.length,c.length,d.length);
var neat = [];
for(var i = 0; i < maxItems; i++){
if(a[i] != undefined){
neat.push(a[i]);
}
if(b[i] != undefined){
neat.push(b[i]);
}
if(c[i] != undefined){
neat.push(c[i]);
}
if(d[i] != undefined){
neat.push(d[i]);
}
}
Math.max
найдет наибольшее количество записей из между 4 массивов, то простой for loop
по этому номеру и проверьте, если значение undefined
, прежде чем толкая его neat array
.
См. JSFiddle
a.length >= i
, потому что a[i] != undefined
вернет false
как для null
и для undefined
индексов. Кроме того, уменьшение 1
от maxItems
в условии цикла не является необходимым и пропустит последний элемент самого большого массива.
null
и undefined
значения, скорее всего, учитывая, что наборы данных являются integers
и strings
. Индексы в массивах начинаются с 0
, необходимо убрать 1, иначе вы в конечном итоге будете выполнять последнюю итерацию для значений индекса, таких как undefined
значения, так как Math.max
будет возвращать количество элементов в массиве. Скажем, есть 6 элементов, maxItems = 6
, максимальный индекс в массиве равен 5, поэтому последняя итерация избыточна.
Потому что длина всех массивов равна. Поэтому мы можем легко сделать это с помощью цикла.
var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ];
var b = [ 1, 2, 3, 4, 5, 6];
var c=["a","b","c","d","e","f"];
var d=[7,8,9,10,11,12]
var neat=[], i;
for(i=0;i<a.length;i++){
neat.push(a[i]);
neat.push(b[i]);
neat.push(c[i]);
neat.push(d[i]);
}
console.log(neat);
.push
? Посмотрите другие ответы ниже, которые совпадают с вашими, и покажите эту функцию.