ну мне кажется пустой объект это ок. типа факт передачи данных есть, но они пустые. например эта программулина могла бы использоваться в системе аутентификации при заходе на сайт, если пользователь ничего не ввел, то пустой объект отражается как посещение без регистрации. т.е. ноунейм пользователь заходил, к примеру. И длина массива была бы как раз количеством уникальных посещений, где пустые объекты, это случайные гости, которых можно отбраковать при желании. для сбора статистики например.
вообще не критично, Кекс не рассказывает для чего это все нужно…
values[i].reduce((a,b) => a + b,0) вот тут не понял зачем суммировать значения? типа проверить что они не пустые в сумме? ну такое себе, можно же передать [,5,] вот так, и там будет 5. только это не логично, принимать информацию без имени. тогда уж просто values[i][0] - там как раз имя содержится. а если его нет, то и смысла во всем этом тоже.
Подскажите пожалуйста, правильно ли я понял что при таком коде:
if (kay.length > massivMassiv[i].length) {
kay.length = massivMassiv[i].length;
};
если сначала будет короткий массив а потом длинный то уже будет ошибка, так как kay.length примет значение длины короткого массива. Я имею в виду что при таком массиве
getData([“name”,“growth”,“weight”,“age”],
[[“Пётр”,“165”,“70”],[“Светлана”], [“Василий”,“170”],
kay.length уменьшится до “1” когда дойдет до [“Светлана”] и в следующем покажет только [“Василий”] а не [“Василий”,“170”]. Это так? Или kay.length при следующем круге цикла заново примет изначальное значение?
И второй вопрос я написал прям в коде, что бы было понятней.
Весь код.
var getData = function(kay, massivMassiv) {
var otvetMas = []; // почему если перенести сюдаvar otvetObjekt = {}; , то код не работает. Точнее он работает очень странно все объекты в новой матрице становятся как последний, и не понятно почему
for (var i = 0; i < massivMassiv.length; i++) { var otvetObjekt = {};
for (var j = 0; j < kay.length; j++) {
if (kay.length > massivMassiv[i].length) {
kay.length = massivMassiv[i].length;
};
otvetObjekt[kay[j]] = massivMassiv[i][j];
};
otvetMas[i] = otvetObjekt;
};
return otvetMas;
};
Да верно, затрет значения. Изменять длину массивов таким образом - плохая идея (если конечно мы не говорим об обрезке, но тут лучше применять метод .slice() ). Как вариант - можно создавать буферную переменную на каждой итерации, в которой будет копия массива ключей. Но для этой задачи это не нужно (т.е. не нужно сравнивать длины массивов вообще).
Потому что в таком случае у вас в объекте переписываются только значения ключей, а не пары ключ-значение. Т.е. если подобного ключа нет на данной итерации цикла, то он оставит значение из какой-то из предыдущих итераций. Чтобы этого не происходило, мы в начале каждой новой итерации внешнего цикла затираем объект новым пустым и потом добавляем в него пары ключ-значение.
аргументы в функцию передайте.
у пустого аргумента (undefined) нет свойстваlength, потому что оно есть только на экземпляре массива или строки, собственно об этом и написано: Cannot read property ‘length’ 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 ();
Но вот сама ошибка осталась. Смотрю на второй пример в шапке и в упор не вижу разницы (кроме условия). Ткните пальцем плз.
Подскажите, почему не работает вот такой, казалось бы, похожий код? Я не задавала переменную length, а определяла длину через newArray.length. Разве это не одно и то же получается? Ведь мы собираем объект по длине нового объекта, а это и есть newArray.length.
var getData = function (keysArray, dataArray) {
var newArray = [];
Можете помочь, когда покупаешь подписку на месяц включается автоплатёж, как его отключить? Потому что в этом месяце я закончу все задания и не хотелось бы чтобы у меня автоматов в след. месяце деньги слетели и так далее. Не знаю куда обратиться, поэтому вам написал. Можете помочь или дать контакты куда мне написать.
Я считаю что прошлый вызов был посложнее как - то. Этот как - то более очевиден. Но я как не умел писать код “как нормальный пацаны” - так и не умею. Таки придется заниматься с репетитором
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], то это означает, что элемента не существует?