Как-то давно наткнулся в нете, на одну из задач которую возможно задать при собеседовании на место «Front-End Web Developer». Так вот ее условие:
Как я понимаю объединяющиеся массивы могут быть разной длины, поэтому нужно написать универсальную функцию, которая сможет вернуть результат двух массивов разной длинны.
let num = [1,2,3,4];
let str = ['a','b','c'];
function sum(a,b) {
let result = [];
for (let i = 0; i < Math.max(b.length, a.length); i++){
result = result.concat(a[i]).concat(b[i])
}
console.log(result)
return result;
}
sum(num, str);
У меня получилось что у второго объединяющегося массива последний элемент может быть 'undefined'.
Как можно было бы решить по другому и интересней?
Правильный ответ получит тот у кого решение будет самым коротким и без 'undefined' как у меня.
Чтобы увидеть самый 'простой' ответ, вопрос будет закрыт в 15:00
пятница, 6 апреля 2018 г. (GMT+1).Так как ответы увеличиваются с каждым днем, вопрос закроется в 15:00 понедельник, 9 апреля 2018 г. (GMT+1).
Ответ
вариант решения
let a = [1,2,3,4];
let b = ['a','b','c','d','e','f'];
let s = Math.max(a.length, b.length)*2;
let d = [a,b];
let r = [];
for(i=0;i
вторая ревизия, укоротил код заменой for на while, и math.floor на формулу
let a = [1,2,3,4];
let b = ['a','b','c','d','e','f'];
let s = Math.max(a.length, b.length)*2,
d = [a,b],
r = [],
v, i=-1;
while(s-i++){
v = d[i%2][(i-i%2)/2]; // или d[i%2][~~(i/2)]
if(v != undefined) r.push(v);
}
console.log(r)
по заявкам, для произвольного числа массивов.
const merge = (...d) => {
let c = d.length, i = -1, v, r = [],
s = Math.max(...d.map(x => x.length))*c;
while(s-i++){
(v = d[i%c][~~(i/c)]) != undefined ? r.push(v):0;
}
return r;
};
console.log(
merge(['a','b'], [1,2,3], ['а','б','в','г'])
)
Комментариев нет:
Отправить комментарий