Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Объект разбить на части. (https://javascript.ru/forum/jquery/72150-obekt-razbit-na-chasti.html)

Dark Souls 12.01.2018 03:15

Объект разбить на части.
 
Подскажите пожалуйсто:
есть объект из объектов JSON:
"0":{
    "name":"Vsya",
    "lname":"Pupkin",
    "email":"sd@mail.ru",
    "country":"Tam"
},
"1":{
    "name":"Fedya",
    "lname":"Batareqkin",
    "email":"ttt@mail.ru",
    "country":"Tut"
},.......

И там 1275 шт.
Как его разбить на части по 20 шт:
"0":{
    "0":{
        "name":"Vsya",
        "lname":"Pupkin",
        "email":"sd@mail.ru",
        "country":"Tam"
    }, //........ 20 шт
},
"1":{
    "0":{
        "name":"Vsya",
        "lname":"Pupkin",
        "email":"sd@mail.ru",
        "country":"Tam"
    }, //........ 20 шт
},


Спасибо! )

ksa 12.01.2018 08:41

Цитата:

Сообщение от Dark Souls
Как его разбить на части по 20 шт:

Из, приведенного тобой, "примера" не понятно как ты собрался все это бить на части... :blink:

Но, как вариант, строку можно преобразовать в объект или массив JS, а потом циклом выбрать нужные части в некий массив или объект.
После такого "разбиения" результат опять преобразовать в JSON-строку...

laimas 12.01.2018 08:45

Цитата:

Сообщение от Dark Souls
есть объект из объектов JSON

JSON это не объект. А откуда эти данные?

рони 12.01.2018 10:01

Dark Souls,
<script>
function fn(obj, num) {
  return Object.keys(obj).reduce(function(a, b, i) {
    i = i / num | 0;
    a[i] ? a[i][b % num] = obj[b] : a[i] = {0:obj[b]};
    return a;
  }, {});
}
;
var d = {}; //для примера
for (var i=0; i<50; i++)  {d[i] = {"name":"Vsya"}}
document.write(JSON.stringify(fn(d, 5)))
</script>

Dilettante_Pro 12.01.2018 12:15

Такой вид ключей так и напрашивается на то, чтобы сделать двумерный массив объектов.
Разбивка по 2
<script>
var obj = {"0":{
    "name":"Vasya",
    "lname":"Pupkin",
    "email":"sd@mail.ru",
    "country":"Tam"
},
"1":{
    "name":"Fedya",
    "lname":"Batareqkin",
    "email":"ttt@mail.ru",
    "country":"Tut"
},
"2":{
    "name":"Vanya",
    "lname":"Shishkin",
    "email":"ss@mail.ru",
    "country":"Zdes"
},
"3":{
    "name":"Frosya",
    "lname":"Burlakova",
    "email":"fff@mail.ru",
    "country":"Gdeto"
}},
arr = [],
i = 0,
j = -1;
arr[0] = [];
for (var key in obj) {
   if (j < 1) { j++ } else { i++; j = 0; arr[i] = []; }
   arr[i][j] = obj[key];
}
document.write(JSON.stringify(arr));
</script>

Dark Souls 12.01.2018 20:20

Dilettante_Pro, шикарная мысль!
Спасибо всем!
Попробую скрипт Рони прикрутить. (если пойму как он работает) :)

Dark Souls 12.01.2018 20:47

Может кому-то пригодиться.
function pgn(obj, num) {
    return obj.reduce(function (a, b, i) {
        if(i % num === 0) a.push({});
        a[a.length-1][i] = b;
        return a;
    }, []);
}


Спасибо еще раз! )

laimas 13.01.2018 02:06

Dark Souls,
если эта затея ради вывода, то зачем же разбивать предварительно, если деление по модулю поможет это в самом процессе вывода.


Часовой пояс GMT +3, время: 16:54.