Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как разобрать json (https://javascript.ru/forum/jquery/52720-kak-razobrat-json.html)

Dtri 03.01.2015 03:25

Как разобрать json
 
Здравствуйте.
помогите разбить JSON вида:

с: {
a1:1
b1:2
}


на json вида

e:[a,b] и d:[1,2]

Safort 03.01.2015 04:12

Это не JSON, это объекты JS.

Dtri 03.01.2015 13:08

Цитата:

Сообщение от Safort (Сообщение 349314)
Это не JSON, это объекты JS.

хорошо. учту. А как разбить эти объекты?

рони 03.01.2015 13:23

Dtri,
var с = {"a1":1,"b1":2}, d = [], e = [];
Object.keys(с).forEach(function (key) {
  d.push(с[key])
  e.push(key.replace(/\d/,''))
});
alert([d,e].join('\n'))

Dtri 03.01.2015 15:51

Цитата:

Сообщение от рони (Сообщение 349336)
Dtri,
var с = {"a1":1,"b1":2}, d = [], e = [];
Object.keys(с).forEach(function (key) {
  d.push(с[key])
  e.push(key.replace(/\d/,''))
});
alert([d,e].join('\n'))

рони, спасибо.

поясни пожалуйста.
(/\d/,'')
это регулярное выражение?
и что оно делает?

рони 03.01.2015 16:22

Dtri,
да, убирает 1 в a1 и b1

krutoy 04.01.2015 00:18

o={a: 1, b: 2}
a=[]; b=[]

for(i in o){a.push(i); b.push(o[i])}
alert([a,b])


// [ [ 'a', 'b' ], [ 1, 2 ] ]

bes 04.01.2015 11:18

krutoy,

o={a: 1, b: 2}
a=[]; b=[]
o.__proto__.c = 8;

for(i in o){a.push(i); b.push(o[i])}
alert([a,b])


// [ [ 'a', 'b', 'c' ], [ 1, 2, 8 ] ]

Dtri 04.01.2015 14:52

Цитата:

Сообщение от bes (Сообщение 349468)
krutoy,

o={a: 1, b: 2}
a=[]; b=[]
o.__proto__.c = 8;

for(i in o){a.push(i); b.push(o[i])}
alert([a,b])


// [ [ 'a', 'b', 'c' ], [ 1, 2, 8 ] ]

а зачем тут o.__proto__.c = 8?
и что делает __proto__?
в данном случае.

насколько я понял добавляет в объект "о"
с:8
после чего
о={a:1, b:2, c:8}
правильно?

bes 04.01.2015 14:56

Цитата:

Сообщение от Dtri
а зачем тут o.__proto__.c = 8?

а почему бы и нет

Цитата:

Сообщение от Dtri
и что делает __proto__?

слабо прогуглить?

Цитата:

Сообщение от Dtri
в данном случае.

for-in выводит все свойства с учётом перечисляемых свойств прототипа

krutoy 04.01.2015 16:51

bes,
И что? Если не нужны св-ва из прото используй hasOwnProperty.

bes 04.01.2015 18:02

Цитата:

Сообщение от krutoy
bes,
И что? Если не нужны св-ва из прото используй hasOwnProperty.

и приходим к полифилу Object.keys , который уже предложил рони

krutoy 04.01.2015 18:07

Цитата:

Сообщение от bes
и приходим к полифилу Object.keys , который уже предложил рони

Нет, я никуда не прихожу. Дефолтно, объект нельзя рассматривать в отрыве от прототипов, ибо это нарушает принцип абстрагирования объекта от его реализации. Если нужен только лишь текущий хеш, используем hasOwnProperty. Все абсолютно просто и прозрачно.

Можно и Object.keys пользовать, но это синтаксический мусор, я против этого. Нельзя на каждый пук запиливать функцию на уровне языка, для этого есть либы. Это охуевшие комитетчики уже охуели вконец, маразму нет предела.

bes 04.01.2015 18:11

Цитата:

Сообщение от krutoy
Нет, я никуда не прихожу. Дефолтно, объект нельзя рассматривать в отрыве от прототипов, ибо это нарушает принцип абстрагирования объекта от его реализации. Если нужен только лишь текущий хеш, используем hasOwnProperty. Все абсолютно просто и прозрачно.

не понимаю я тебя, Object.keys как раз даёт собственные перечисляемые свойства, полифил и ты делают этот фильтр как раз через hasOwnProperty, можно городить, но особого смысла в этом не видно

krutoy 04.01.2015 18:17

bes,
Я там проапдейтил, ты не успел прочитать, повторюсь:
Цитата:

Сообщение от krutoy
Можно и Object.keys пользовать, но это синтаксический мусор, я против этого. Нельзя на каждый пук запиливать функцию на уровне языка, для этого есть либы. Это охуевшие комитетчики уже охуели вконец, маразму нет предела.


krutoy 04.01.2015 18:23

Цитата:

Сообщение от bes
можно городить, но особого смысла в этом не видно

И тут непонятно, что ты подразумеваешь под "городить". Как раз, вариант рони чрезжопный, он делает за 2 прохода то что я делаю за один. В данном случае, избыточность, как по объему кода, так и концептуально, не в моем примере.

bes 04.01.2015 18:25

Цитата:

Сообщение от krutoy
Можно и Object.keys пользовать, но это синтаксический мусор, я против этого. Нельзя на каждый пук запиливать функцию на уровне языка, для этого есть либы. Это охуевшие комитетчики уже охуели вконец, маразму нет предела.

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

bes 04.01.2015 18:26

Цитата:

Сообщение от krutoy
И тут непонятно, что ты подразумеваешь под "городить". Как раз, вариант рони чрезжопный, он делает за 2 прохода то что я делаю за один. В данном случае, избыточность, как по объему кода, так и концептуально, не в моем примере

здесь городить - не использовать Object.keys

krutoy 04.01.2015 18:33

Цитата:

Сообщение от bes
иначе будешь на каждую страницу подключать jquery и прочие

Не надо ничего подключать
keys=function(o){
 var out=[]
 for(var i in o) {if(!(o.hasOwnProperty(i))) return out; out.push(i)}
}

krutoy 04.01.2015 18:37

bes,
Syntactic sugar causes cancer of the semi-colons (c)Perlis
от себя добавлю, еще cancer of the programmer's brain

krutoy 04.01.2015 18:40

Цитата:

Сообщение от bes
здесь городить - не использовать Object.keys

Скажи конкретно, нахуя мне сдался там твой Object.keys? В чем профит его применения в данном случае?

bes 04.01.2015 18:47

Цитата:

Сообщение от krutoy
Скажи конкретно, нахуя мне сдался там твой Object.keys? В чем профит его применения в данном случае?

в данном случае, особого смысла нет, я лишь указал, что код не всегда будет таким простым

Dtri 05.01.2015 18:07

bes,
"слабо прогуглить?"

погуглил. если бы понял. не спрашивал.

Dtri 05.01.2015 18:15

Всем спасибо за участие. Ваша маленькая склока была очень содержательной и познавательной.

Особое спасибо Крутому. Я использовал его пример. Так как он наиболее простой и в моём случае хватает с головой/

всем плюсы)

bes 05.01.2015 18:42

Цитата:

Сообщение от Dtri
погуглил. если бы понял. не спрашивал.

первая ссылка по запросу __proto__
https://developer.mozilla.org/ru/doc...s/Object/proto
согласен, мутновато для первого знакомства написали
вторая ссылка
http://habrahabr.ru/post/140810/
здесь понятнее

делаем важный финт
читаем, разибраемся, понимаем, что ничего сложного
http://learn.javascript.ru/prototype


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