powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите заполнить массив..Не получается
11 сообщений из 11, страница 1 из 1
Помогите заполнить массив..Не получается
    #39927619
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вот такой шаблон JSON который у меня должен получится на выходе:

Код: javascript
1.
{"filters": {"somefilter": {"values": [{"value": "one"},{"value": "two"}]}}}



Есть у меня родительский цикл в котором я получаю значение переменной filter_name (это значение должно попасть в somefilter в будущем JSON).
Далее - есть дочерний цикл, где я получаю набор разных filter_value для моего filter_name, примерно так:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var jsonStr = '{"filters": {"somefilter": {"values": [{"value": "wow"},{"value": "tubular"}]}}}';

alert(filter_name); // имя фильтра

for (j = 0; j < AccessControlFilter.length; j++)
{
    filter_value = AccessControlFilter[j].value; // значения для фильтра

    // почему если я пишу так - то не получается ничего запихать в мой JSON?:

    var obj = JSON.parse(jsonStr);
    obj['filters'].push({filter_name: { values: [{ "value": filter_value  }] } });
    jsonStr = JSON.stringify(obj);
    alert(jsonStr);

};



Собственно вопрос оформлен в комментарии в коде, не могу никак понять, что я делаю не так..
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927620
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале конечно хотелось бы не просто добавлять элементы в уже существующий массив, а создать его заново, с нуля, но со структурой которую я описал.
У меня пока не хватает знаний чтобы сделать так.
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927622
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santa89,

дык filters - это объект, а не массив
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927624
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santa89,

если вы в массив values хотите добавлять значения, то так:
Код: javascript
1.
obj['filters'][filter_name]['values'].push({ value: filter_value });
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927640
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

вроде бы и верно всё, но не получается.
Может быть потому что obj['filters'][filter_name] - у меня [filter_name] это динамическая строка, которая получается в родительском цикле: filter_name = filters[i].getFieldName();

Т.е. мой код превращается в такое: obj['filters'][XXX] - может быть в этом ошибка?
Может быть можно как-то вобще с нуля в JSON всё запихать а не подстраиваться к уже готовому JSON (var jsonStr)?
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927670
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santa89,

может вы приведёте текст ошибки из консоли?
в изначальном json-е все фильтры перечисленны, или их надо добавлять?
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927671
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santa89,

зачем вам вообще этот json-шаблон?
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927678
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из того, что я понял, я бы сделал так

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var jsonStr = '{"filters": {"somefilter": {"values": [{"value": "wow"},{"value": "tubular"}]}}}';

alert(filter_name); // имя фильтра
var obj = JSON.parse(jsonStr);

if (obj.filters[filter_name] === undefined) obj.filters[filter_name] = {values : []}

for (let j = 0; j < AccessControlFilter.length; j++)
{
    const filter_value = AccessControlFilter[j].value; // значения для фильтра
    obj.filters[filter_name].values.push({value: filter_value })

};

// Еще проще
//for (const acv of AccessControlFilter) obj.filters[filter_name].values.push({value: acv.value });
//

jsonStr = JSON.stringify(obj);
alert(jsonStr);
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927679
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Santa89,

зачем вам вообще этот json-шаблон?


он потом уйдёт на экспорт, надо каждые filter_value сопоставлять своему filter_name.
а в консоли у меня почему-то пусто (Google Chrome), а веб-страница на ASP.NET

voraa, спасибо завтра попробую!
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927699
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santa89
skyANA
Santa89,

зачем вам вообще этот json-шаблон?


он потом уйдёт на экспорт, надо каждые filter_value сопоставлять своему filter_name.
а в консоли у меня почему-то пусто (Google Chrome), а веб-страница на ASP.NET

Ну теперь-то всё понятно :)

Если изначально у нас есть пустой набор фильтров:
Код: javascript
1.
var filters = {};


То в родительском цикле, для каждого filter_name можно сделать следующее:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var values = [];

for (j = 0; j < AccessControlFilter.length; j++)
{
    values.push({ value: AccessControlFilter[j].value });
}

filters[filter_name] = { 'values': values };


И по окончанию родительского цикла получить строку:
Код: javascript
1.
var jsonStr = JSON.stringify({ 'filters': filters });


Причём родительский цикл можно и короче оформить:
Код: javascript
1.
filters[filter_name] = { values: AccessControlFilter.map(x => { value: x.value }) };
...
Рейтинг: 0 / 0
Помогите заполнить массив..Не получается
    #39927852
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
Santa89
пропущено...


он потом уйдёт на экспорт, надо каждые filter_value сопоставлять своему filter_name.
а в консоли у меня почему-то пусто (Google Chrome), а веб-страница на ASP.NET

Ну теперь-то всё понятно :)

Если изначально у нас есть пустой набор фильтров:
Код: javascript
1.
var filters = {};


То в родительском цикле, для каждого filter_name можно сделать следующее:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var values = [];

for (j = 0; j < AccessControlFilter.length; j++)
{
    values.push({ value: AccessControlFilter[j].value });
}

filters[filter_name] = { 'values': values };


И по окончанию родительского цикла получить строку:
Код: javascript
1.
var jsonStr = JSON.stringify({ 'filters': filters });


Причём родительский цикл можно и короче оформить:
Код: javascript
1.
filters[filter_name] = { values: AccessControlFilter.map(x => { value: x.value }) };



Волшебно, то, что нужно!
Всем большое спасибо за помощь!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите заполнить массив..Не получается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]