JavaScript

В чём проблема? не могу длину определить? undefined возвращает

получаю json

{noname:
files: {2: "img_209804.webp", 3: "img_248730.jpg", 4: "img_257256.jpg", 5: "img_401780.jpg", 6: "img_475929.webp", 7: "img_744919.webp"}
path: ["/users/500475143/noname/"]}

нужно определить количество записей в files.

пишу

var sizeArray=finish['noname']['files'];
console.log(sizeArray.length);

возвращает undefined?
Научись сперва при задании вопроса хотябы правельно сформировать сам массив всё за вас домысливать приходится итак выгледеть он по идеи так

finish={noname:{
files: {2: "img_209804.webp", 3: "img_248730.jpg", 4: "img_257256.jpg", 5: "img_401780.jpg", 6: "img_475929.webp", 7: "img_744919.webp"}},
path: ["/users/500475143/noname/"]};

sizeArray=finish['noname']['files'];

console.warn(Object.keys(sizeArray).length);

Вот так всё работает что не ясно читай первый ответ там всё сказано

Дaурен Ага Bvk
Дaурен Ага Bvk
69 313
Лучший ответ
У тебя finish['noname']['files'] - ОБЪЕКТ. У которого НЕТ свойства length. И то, что имена полей - числа, ничего не меняет. Хочешь получить массив - создавай структуру, которая запишется в JSON именно как массив: в квадратных скобках и без указания индексов (индексация идет автоматически от 0 до lenght-1 без пропусков).

У тебя в files отсутствуют индексы 0 и 1. Потому сериализация происходит в объект, а не в массив. А десериализатор видит запись объекта и создаёт объект.

Не проще ли передавать размер непосредственно в JSON?
Самат Калиев
Самат Калиев
99 191
Если не умеешь в JSON из-за того что тупенький, то после парсинга можешь просто создать массив из значений объекта files:
let filesArr = Object.values(finish.noname.files);
console.log(filesArr.length);
пишите без ошибок формируйте объекты правильно

var lst = {
noname: /* формируем files */ { files : {
2: "img_209804.webp", 3: "img_248730.jpg", 4: "img_257256.jpg", 5: "img_401780.jpg", 6: "img_475929.webp", 7: "img_744919.webp"}
} , /* запятая */
path: ["/users/500475143/noname/"]
}

// получаем количество

alert( Object.values( lst['noname']['files'] ).length );