gordon_shamway
@gordon_shamway

Почему array.length возвращает 0?

К примеру есть массив дат
result = ["2017-08-10","2017-08-11","2017-08-12","2017-08-13","2017-08-14".. и тд]

Дальше мне нужно перебрать еще несколько массивов и если там есть такая дата записать в другой
как то так
for (var i = 0; i < result.length; i++) {
              compact.push([i+1,all[result[i]],register[result[i]], percent[result[i]] ]);
            }


При попытке узнать количество индексов в compact я получаю 0
console.log(Object.keys(compact).length) //0
console.log(compact.length) // 0


Хотя массив не пуст
db8d2865cb004869b623670865aac723.png
Почему так?
И второй вопрос как в массиве можно заменить undefined на 0 без перебора массива?
  • Вопрос задан
  • 584 просмотра
Пригласить эксперта
Ответы на вопрос 2
Ahen
@Ahen
Универсальный дилетант
Первый вопрос - у меня замечательно отрабатывает .length в вашем примере. У вас, скорее всего, консольлог с length вызывается раньше цикла.

Второй вопрос - использовать оператор ИЛИ || в своем переборе, где Вы пушите результат, почему нет?

const arr = [{test1: 1, test2: 2}, {test1: 1}, {test1: 1, test2: 2}];
arr.forEach(function(item, i, arr) {
  console.log('Test1: ' + (item.test1 || 'Empty'));
  console.log('Test2: ' + (item.test2 || 'Empty'));
});
//Test1: 1
//Test2: 2
//Test1: 1
//Test2: Empty
//Test1: 1
//Test2: 2
Ответ написан
Комментировать
gromdron
@gromdron
Работаю с Bitrix24
Я использовал фрагмент кода и дополнил его (чтобы не ругался на неизвестные массивы). У меня получился фрагмент:

all = {
	"2017-08-10": 10,
	"2017-08-11": 11,
	"2017-08-12": 12,
	"2017-08-13": 13,
	"2017-08-14": 14
};

register = {
	"2017-08-10": 10,
	"2017-08-11": 11,
	"2017-08-12": 12,
	"2017-08-13": 13,
	"2017-08-14": 14
};

percent = {
	"2017-08-10": 10,
	"2017-08-11": 11,
	"2017-08-12": 12,
	"2017-08-13": 13,
	"2017-08-14": 14
};

result = ["2017-08-10","2017-08-11","2017-08-12","2017-08-13","2017-08-14"];
compact = [];
for (var i = 0; i < result.length; i++)
{
	compact.push([i+1,all[result[i]],register[result[i]], percent[result[i]] ]);
}

При выполнении указанных Вами комманд:
console.log(Object.keys(compact).length)
console.log(compact.length)


В обох случаях возвращается 5.
Что я делаю не так? и чем мой код отличается от Вашего?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы