Имеются массивы a, b, c, d, e..
Необходимо создать новый массив z
, состоящий из пар ключ значение: a1 ->[b1, c1, d1, e1, ...]
, a2->[b2, c2, d2, e2, ...]
Как сделать это более элегантно, без прогонки по цикл в JavaScript?
Если нельзя циклы, то можно, конечно, через рекурсию попробовать:
const arrA = ['a1','a2','a3','a4','a5'];
const arrB = ['b1','b2','b3','b4','b5'];
const arrC = ['c1','c2','c3','c4','c5'];
const arrD = ['d1','d2','d3','d4','d5'];
const arrE = ['e1','e2','e3','e4','e5'];
const z = [];
function setNewArr(arrA,arrB,arrC,arrD,arrE) {
const result = {};
if(arrA.length == 0) {
return z;
}
else {
let firstA = arrA.shift();
let newArr = [arrB.shift(), arrC.shift(), arrD.shift(), arrE.shift()];
result[firstA] = newArr;
z.push(result);
return setNewArr(arrA,arrB,arrC,arrD,arrE);
}
}
console.log(setNewArr(arrA,arrB,arrC,arrD,arrE));
Ну, если очень не хочется видеть слово for, можно поизвращаться:
let a = ["a1", "a2", "a3", "a4"];
let b = ["b1", "b2", "b3", "b4"];
let c = ["c1", "c2", "c3", "c4"];
let d = ["d1", "d2", "d3", "d4"];
let e = ["e1", "e2", "e3", "e4"];
let obj = Object.fromEntries( a.map( (elem, i) => [ elem, [b[i], c[i], d[i], e[i]] ] ) );
console.log(obj);
/* a.map( (elem, i) => [ elem, [ b[i], c[i], d[i], e[i] ] ]
* Заменяет каждый элемент из `a` на массив вида [элем, [......]]
* Собирая в массив [...] элементы под номером `i` из остальных перечисленных массивов
* На выходе:
* [
* ["a1", ["b1", "c1", "d1", "e1"] ],
* ["a2", ["b2", "c2"... ] ],
* ]
*
* А Object.fromEntries() как-раз требует такой массив из подмассивов [ключ, значение]
*/
Но оно всё равно за кулисами делает свои циклы. И коротко != элегантно... я бы всё равно выбрал простой и понятный цикл, завернутый в функцию)
Исчо вариант, тоже по сути цикл, зато вызов прикольный:
let a = ["a1", "a2", "a3", "a4"];
let b = ["b1", "b2", "b3", "b4"];
let c = ["c1", "c2", "c3", "c4"];
let d = ["d1", "d2", "d3", "d4"];
let e = ["e1", "e2", "e3", "e4"];
console.log( objKeys(a).values(b, c, d, e) );
/***/
function objKeys(arr){
objKeys.values = function (...arrays){
return arr.reduce( (obj, elem, i) => {
obj[ elem ] = arrays.map( e => e[i] );
return obj;
}, {});
}
return objKeys;
}
Можно сделать проще, но я думаю читабельность у данного кода достаточна
const arrA = ['a1','a2','a3','a4','a5'];
const arrB = ['b1','b2','b3','b4','b5'];
const arrC = ['c1','c2','c3','c4','c5'];
const arrD = ['d1','d2','d3','d4','d5'];
const arrE = ['e1','e2','e3','e4','e5'];
const arrs = [arrB, arrC, arrD, arrE];
var result = {};
arrA.forEach((e, i) => {
result[e] = arrs.map(e => e[i]);
})
console.log(result);
там песочница
const arrA = ['a1', 'a2', 'a3', 'a4', 'a5'];
const arrB = ['b1', 'b2', 'b3', 'b4', 'b5'];
const arrC = ['c1', 'c2', 'c3', 'c4', 'c5'];
const arrD = ['d1', 'd2', 'd3', 'd4', 'd5'];
const arrE = ['e1', 'e2', 'e3', 'e4', 'e5'];
// --
// --
type $matrix<T> = T[][];
// --
type $matrix2map = ([keys, ...q]: $matrix<string>) => Map<string, string[]>
const matrix2map: $matrix2map = ([keys, ...q]) => new Map(keys.map((k, i) => [k, q.map(q => q[i])]))
// --
type $matrix2obj = ([keys, ...q]: $matrix<string>) => { [k: string]: string[] }
const matrix2obj: $matrix2obj = ([keys, ...q]) => Object.fromEntries(keys.map((k, i) => [k, q.map(q => q[i])]))
// --
// --
const log = (...q: any[]) => (console.log(...q), log)
const matrix = [arrA, arrB, arrC, arrD, arrE,];
// --
log
('matrix2map', matrix2map(matrix))
('matrix2obj', matrix2obj(matrix))
;
const arrA = ['a1', 'a2', 'a3', 'a4', 'a5'];
const arrB = ['b1', 'b2', 'b3', 'b4', 'b5'];
const arrC = ['c1', 'c2', 'c3', 'c4', 'c5'];
const arrD = ['d1', 'd2', 'd3', 'd4', 'd5'];
const arrE = ['e1', 'e2', 'e3', 'e4', 'e5'];
// --
// --
const matrix2map = ([keys, ...q]) => new Map(keys.map((k, i) => [k, q.map(q => q[i])]));
const matrix2obj = ([keys, ...q]) => Object.fromEntries(keys.map((k, i) => [k, q.map(q => q[i])]));
// --
// --
const log = (...q) => (console.log(...q), log);
const matrix = [arrA, arrB, arrC, arrD, arrE, ];
// --
log
('matrix2map', matrix2map(matrix)) // смотри консоль браузера
('matrix2obj', matrix2obj(matrix))
;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как удалить первую ссылку в HTML с помощью JavaScript? Думаю нужно выбрать первый элемент и удалить его, помогите с кодом
как сделать чтобы хекс код и сам цвет отображались под полем после нажатия?после нажатия поле и кнопка пропадают