Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   JSON localStorage (https://javascript.ru/forum/events/69557-json-localstorage.html)

laimas 03.07.2017 14:31

Цитата:

Сообщение от biryukovm
перезапись

Просто записываем значение свойства:

data[идентификатор] = {данные}

Если такое свойство (идентификатор) уже есть в объекте data, то его данные заменится новыми, иначе в data будет добавлено новое свойство (идентификатор) с данными.

Если есть необходимость узнать есть ли свойство (идентификатор) в объекте, то можно получить свойства объекта в массив и в нем проверить:

if(~Object.keys(data).indexOf(свойство)) {
    //есть такое свойство у объекта
}


PS. Тут важен контекст понятия "узнать", можно ведь просто проверить что вернет обращение к свойству объекта, а не перебирать ключи.

PS. А удалить свойство объекта - delete data[свойство]

biryukovm 03.07.2017 17:33



Подскажите еще такой вопрос.
Я делаю ключь

var key = tov_key+key_ves+key_name;
alert(key);
var tovar_list = {key:{
"tovar":"tovar_27",
"price":"362"
}};


И на выходе получаю
key:{"tovar":"tovar_27","price":"362"} -- а надо чтобы key изменилось на то что я указывал а не названием переменной.

И еще такой момент как я могу сжать key предположим он будет в длину 450 символов что и есть неудобно и превести его в единый формат типа Base64 или MD5 нашел статейки но так и не понял почему не работает

laimas 03.07.2017 17:38

Цитата:

Сообщение от biryukovm
Я делаю ключь

Ключ, а не ключь, чай не блондинка. :)

Цитата:

Сообщение от biryukovm
var key = tov_key+key_ves+key_name

Это что?

Цитата:

Сообщение от biryukovm
а надо чтобы key изменилось на то что я указывал а не названием переменной

Вы говорили, что в РНР разбираетесь. Тогда чтобы понятней было, будем оперировать им. У вас есть массив:

$a = [
     'as' => 'value',
     25  => 'value'
]


Вопрос - можно ли кличи этого массива переименовать?

laimas 03.07.2017 17:47

Цитата:

Сообщение от biryukovm
я могу сжать key предположим он будет в длину 450 символов что и есть неудобно и превести его в единый формат типа Base64 или MD5

Хрен знает что вы там делаете, поэтому даже не понимаю о чем речь, но если до такого дошло, то это нечто. )

Кстати, Base64, это скорее экспандер, а не сжиматель, так как результат будет в три раза длиннее исходного, а MD5, это хеш.

biryukovm 03.07.2017 21:03

Цитата:

Сообщение от laimas (Сообщение 457404)
Хрен знает что вы там делаете, поэтому даже не понимаю о чем речь, но если до такого дошло, то это нечто. )

Кстати, Base64, это скорее экспандер, а не сжиматель, так как результат будет в три раза длиннее исходного, а MD5, это хеш.

Тут все по серьезному только для взрослых

laimas 03.07.2017 21:21

Цитата:

Сообщение от biryukovm
Тут все по серьезному только для взрослых

Глупости все это, хотя хрен знает чего вы там изобретаете. Но сам вопрос "как переименовать свойство" наводит на мысли нехорошие, чего-то не то и не так делается. )

biryukovm 04.07.2017 06:51

Ну в общем вот массив который у меня формируется:
[
{"key":"16a3f79f7f1abc856e3a897ed5c71616","param":{"tip":"1","tip2":"tewer"}},
{"key":"1a79c7ebdb390269cca0d2675ef78204","param":{"tip":"1","tip2":"sik"}},
{"key":"83bec884740a900a86f06a0963f07e82","param":{"tip":"1","tip2":"anlo"}}
]


Я за место Object.keys(data).indexOf пошел немного другим методом
var val,param,num_s = 0;
for (val of data) {
    num_s++;
    param = JSON.stringify(val);
    alert(param.key+' = '+num_s)
}


Если я пишу alert(param+' = '+num_s) то выводит каждую строку:
[{"key":"83bec884740a900a86f06a0963f07e82","param":{"tip":"1","tip2":"anlo"}}]



В интернете пересмотрел методы перебора массивов и там не описано более сложный формат
В итоге я пробывал и так
alert(param.key+' = '+num_s)
И так
alert(param[1]+' = '+num_s)
И так
alert(param[0].key+' = '+num_s)




В итоге так и не могу вытащить нужный мне параметр "key" выдет постоянно "undefined"
Как его правильно указать ?

laimas 04.07.2017 07:10

Так как вы представляете свои объекты через .... понятно что, поэтому и маетесь. Ну была мысль в правильном направлении - не массив, а объект объектов.

Что это вообще за хрень такая "key":"83bec884740a900a86f06a0963f07e82", то что вы и пытаетесь переименовать? Хрен с ним, переименовывайте, но у этой сущности тем более должен быть уникальный идентификатор, иначе она будет потеряна.

for (val of data) { ... у вас массив объектов, и если перебирать циклом для поиска, то обычный
for(var i=0; i< data.length; i++) {
    if(data[i].key == 'hash') {
        //что-то делаем
        break;
    }
}

biryukovm 04.07.2017 07:15

Цитата:

Сообщение от laimas (Сообщение 457455)
Что это вообще за хрень такая "key":"83bec884740a900a86f06a0963f07e82", то что вы и пытаетесь переименовать? Хрен с ним, переименовывайте, но у этой сущности тем более должен быть уникальный идентификатор, иначе она будет потеряна.


Эта хрень и есть идентификатор, а точнее основные параметры товара переведены в MD5, я думаю что это сравнивать легче чем строку в 350 символов

laimas 04.07.2017 07:23

Цитата:

Сообщение от biryukovm
Эта хрень и есть идентификатор, а точнее основные параметры товара переведены в MD5

Вообще охренеть. :) Идентификатор по параметрам товара? Это нечто. Идентификатор сущности в базе, это некое уникальное значение, которое может быть сформировано средствами SQL автоматически при добавлении сущности в базу. Делается это просто - полем типа INT с первичным ключом и автоикрементом.

Некие ключи по параметрам, это уже иное, причем если товаров много, то гарантии того, что среди них нет с одинаковыми параметрами, а значит и уникальности таких ключей, нет и все ваше накроется медным тазом. )


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