нет, не правильно. это просто проверка на существование элемента в массиве массивов.
Так а как она работает. Можете навести пример с индексами? Спасибо
Есть косяки в реализации?)
const getData = function(keys, dataArrays)
{
let objectsArray = [];
for (let i = 0; i < dataArrays.length; i++)
{
let object = {};
for (let j = 0; j < dataArrays[i].length && j < dataArrays.length; j++)
{
object[keys[j]] = dataArrays[i][j];
}
objectsArray[i] = object;
}
return objectsArray;
}
Кстати, да, тут не сразу очевидная проблема возникает. Я сначала тоже запутался и не понял причин. Судя по всему, по какой-то причине “JSON.string”, или чем код проверяет страницу, не выводит пустые ключи, хотя массив действительно не соответствует необходимому результату, как у вас верно замечено.
Как по мне, для новичка это может вызвать вполне закономерные трудности. Я выбрал подсказку “Звонок другу” и мы вместе разрулили этот вопрос, без обращения даже к форуму. Но как по мне, было бы понятнее если бы в ответе выводился тот код, который действительно должен появиться.
Так то решение проблемы неверного массива всего одной строкой реализуется.
Мой вариант:
let getData = (arrKey,arrValue) =>{
class arrayToObject{constructor(){}
setKey(a,i){
a.forEach((el,j) => {
(arrKey[j]!=undefined && arrKey[j]!=undefined)? this[arrKey[j]] = a[j]:’’})}
}
return arrValue.map((a,i)=>{let b = new arrayToObject(); b.setKey(a,i); return b});
};
var getData = function (keys,values) {
var array = []; // Создаем пустой массив
for (var i=0; i<values.length; i++) { // Начинаем собирать массив
var object = {} // Создаем пустой объект
for (var j=0; (j<keys.length)&&(j<values[i].length); j++) { //СБОРКА ОБЪЕКТА Начинаем собирать объект
object[keys[j]] = values[i][j]; // Cопоставляем j-тому ключю j-тое значение i-того объекта
}
array.push(object); // Собранный объект добавляем в массив объектов
}
return array; // Возвращаем в кач-ве значения ф-ции собранный массив объектов
}
/* Обратите внимание на дополнительное условие выхода из цикла при СБОРКЕ ОБЪЕКТА: цикл прекращается, и в случае, если кончились ключи (а значения тем не менее еще имеются), и в случае, когда ключи не кончились, но значений для них больше нет!*/
Подсмотрел у @Hierumo вариант с if (arrayOfDataArrays[i][j])
и переписал чуть свой, а то было : if (i < values.length)
Вышло вот так (В целом повторяет логику первого решения все того же @Hierumo ):
Давно не спойлер
function getData(arrKey, arrValue) {
let arrObg =[];
for ( values of arrValue) {
let obg = {};
for (let i = 0; i < arrKey.length; i++ ) {
if (values[i]) {
obg[arrKey[i]] = values[i]
}
}
arrObg.push(obg)
} return arrObg
}
var getData = function(arrKey, arrValues) {
var newArr = [];
for(var i = 0; i < arrValues.length; i++) {
var arrValuesIndex = arrValues[i];
var obj = {};
for (var j = 0; j < arrValuesIndex.length; j++) {
var arrKeyIndex = arrKey[j];
if(arrKey[j] != undefined) {
obj[arrKeyIndex] = arrValuesIndex[j];
}
}
newArr.push(obj);
}
return newArr;
}
var getData = function(arrKeys, arrValues) {
var arr = [];
var getObj = function(j) {
var obj = {};
for(var i = 0; i < arrKeys.length; i++) {
for(var m = 0; m < arrKeys.length; m++) {
if(arrValues[j][m]) {
obj[arrKeys[m]] = arrValues[j][m];
}
}
}
return obj;
};
for(var x=0; x<arrValues.length; x++) {
arr.push(getObj(x));
}
return arr;
};
function getKey(arrKeys,arrData){
var obj = {}
for (var i =0;i<arrKeys.length;i++){
var key=arrKeys[i]
obj[key]=arrData[i]
}
return obj
}
function getData(arrKeys,arrData){
var arr=[]
for (var i=0 ;i<arrData.length;i++){
arr[i] =getKey(arrKeys,arrData[i])
}
return arr
}
почему на второй проверке выдает ошибку?
Добрый день!
Во втором тесте в массиве с параметрами некоторые из параметров отсутствуют. Ваш код добавляет отсутствующие параметры со значением undefined:
{name: "Светлана", growth: undefined, weight: undefined, age: undefined}
А должен игнорировать эти параметры:
{name: "Светлана"}
Вот как получилось.
var getData = function (keys, values) {
var objArr = [];
for (var i = 0; i < values.length; i++) {
var obj = {};
for (var j = 0; j < keys.length; j++) {
if (i < values.length && j < values[i].length) {
obj[keys[j]] = values[i][j];
}
}
objArr[i] = obj;
}
return objArr;
};
Я немного глупый, но вот (помогите оптимизировать, пожалуйста):
var getData = function(keys, data) {
var persons = [];
for (var i = 0; i < data.length; i++) {
var personData = data[i];
var object = {};
for (var j = 0; j < personData.length; j++) {
if (keys[j] === undefined) {
break;
}
object[keys[j]] = personData[j];
}
persons.push(object);
}
return persons;
}
Относительно недавно начал учить JavaScript. Условия, массивы, функции - вроде всё понятно было… На прохождении объектов почувствовал неутолимую тягу к алкоголю, хотя что странно, не пью. Ввожу по мере прохождения курса что нужно - зелёная галочка не появляется. После попытки 17-ой уже жмякаю “Показать ответ” - И ВУАЛЯ!!! Все в точности как сам написал, появляется в решении. Ну вот В ТОЧНОСТИ все как сам написал, проверял с Ctrl + C, Ctrl + V. Подскажите, слабый комп/интернет может быть тому причиной? А то белочка уже шкребется в гости, если понимаете о чем я
Добрый день!
В таких случаях должно помочь нажатие кнопки “Проверить на сервере”. Насильно отправляем на проверку и получаем результат.
let getData = function (keys, data) {
let result = [];
for (let i = 0; i < data.length; i += 1) {
let values = data[i];
let obj = {};
let iterator = keys;
if (values.length < keys.length) {
iterator = values;
}
for (let j = 0; j < iterator.length; j += 1) {
let key = keys[j];
let value = values[j];
obj[key] = value;
}
result.push(obj);
}
return result;
};
Получилось так. Проверка пройдена, но есть ощущение, что что-то могла упустить.
let getData = function (keys, dataArrays) {
let newArray = [];
for (let i = 0; i < dataArrays.length; i++) {
let currentObj = {};
for (let j = 0; j < keys.length; j++) {
if (dataArrays[i][j]) {
currentObj[keys[j]] = dataArrays[i][j];
}
}
newArray.push(currentObj);
}
return newArray;
}
let getZippedArrays = (key,value)=>Object.assign(...key.map((elem,index)=>
({[elem]: value[index]})))
let getZippedArrays = (key,value)=>Object.fromEntries(key.map((elem,index)=>
([elem, value[index]])))