Собираем массив объектов 5/5

Добрый день.
Подскажите, что не так сделал? Выскакивает TypeError : Cannot read property ‘length’ of undefined.

var getData = function(keys, arrayArray){
var obj = {};
for (i = 0; i < keys.length; i++){
for (j = 0; j < arrayArray.length; j++){
if (arrayArray[j][i]){
obj[keys[i]] = arrayArray[j][i];
};
};
};
return obj;
}
getData ();

Спасибо

аргументы в функцию передайте.
у пустого аргумента (undefined) нет свойства length, потому что оно есть только на экземпляре массива или строки, собственно об этом и написано: Cannot read propertylength’ of undefined.

сам код неправильно написан, но вы еще сможете его отладить. не забудьте, что мы собираем массив объектов, а не объект.

Не пойму. По условиям понял. Переделал, вот что получилось:
var getData = function(keys, arrayArray) {
var array = [];
for (var i = 0; i < arrayArray.length; i++){
var obj = {};
for (var j = 0; j < keys.length; j++){
if (arrayArray[i][j] && keys[j]){
obj[keys[j]] = arrayArray[i][j];
}
}
array.push(obj);
}
return array;
}
getData ();

Но вот сама ошибка осталась. Смотрю на второй пример в шапке и в упор не вижу разницы (кроме условия). Ткните пальцем плз.

вы вызываете функцию без аргументов getData();
а должны примерно вот так (с выводом в консоль):

console.log(getData(["name","growth","weight","age"],[["Пётр","165","70"],["Василий","170"],["Светлана",,,,,],[,,165,,,,,,]]));

Спасибо.

Подскажите, почему не работает вот такой, казалось бы, похожий код? Я не задавала переменную length, а определяла длину через newArray.length. Разве это не одно и то же получается? Ведь мы собираем объект по длине нового объекта, а это и есть newArray.length.

var getData = function (keysArray, dataArray) {
var newArray = [];

for (var i = 0; i < dataArray.length; i++) {

 if (keysArray.length < dataArray[i].length) {
   newArray.length = keysArray.length;
  } else {
   newArray.length = dataArray[i].length;

}

var obj = {};
 
for (var j = 0; j < newArray.length; j++) {
    obj[keysArray[j]] = dataArray[i][j];
}   
newArray.push(obj);

}
return newArray;
}

Можете помочь, когда покупаешь подписку на месяц включается автоплатёж, как его отключить? Потому что в этом месяце я закончу все задания и не хотелось бы чтобы у меня автоматов в след. месяце деньги слетели и так далее. Не знаю куда обратиться, поэтому вам написал. Можете помочь или дать контакты куда мне написать.

@sasha_sm помогите 1tap плиз

2 Симпатий

Отменить подписку можно вот здесь. Доступ к курсам сохранится до конца оплаченного периода. Будьте внимательны при отмене, там три этапа нужно пройти.

1 Симпатия

СПАСИБО БОЛЬШОЕ ! Отменил

1 Симпатия

Я считаю что прошлый вызов был посложнее как - то. Этот как - то более очевиден. Но я как не умел писать код “как нормальный пацаны” - так и не умею. Таки придется заниматься с репетитором :neutral_face:

var getData = function (arrKeys, arrArrValues) {
  arrObj = [];
  for (var i=0; i<arrArrValues.length; i++) {
    arrObj[i] = {};
    if (arrArrValues[i].length === arrKeys.length ||
        arrArrValues[i].length < arrKeys.length) {
      for (var j=0; j<arrArrValues[i].length; j++) {
          arrObj[i][arrKeys[j]] = arrArrValues[i][j];
      };
    } else {
      for (var j=0; j<arrKeys.length; j++) {
          arrObj[i][arrKeys[j]] = arrArrValues[i][j];
      };
    };
  }; return arrObj
};

сортировка не может быть сложной в принципе, тем более что для нее есть готовый метод с готовыми вариантами коллбэков

Правильно ли я понял, что в arrayOfDataArrays[i][j] индексы i и j должны иметь одинаковое значение. Например [3][3], а если [3][4], то это означает, что элемента не существует?

нет, не правильно. это просто проверка на существование элемента в массиве массивов.

Так а как она работает. Можете навести пример с индексами? Спасибо

Есть косяки в реализации?)

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; // Возвращаем в кач-ве значения ф-ции собранный массив объектов
}
/* Обратите внимание на дополнительное условие выхода из цикла при СБОРКЕ ОБЪЕКТА: цикл прекращается, и в случае, если кончились ключи (а значения тем не менее еще имеются), и в случае, когда ключи не кончились, но значений для них больше нет!*/