JSON.stringify
, вероятно, то, что вы ищете (в настоящее время вы по неосторожности используете .toString()
).JSON.stringify
удалит ваши пары undefined
, потому что они не являются допустимыми значениями JSON, поэтому для их искусственного сохранения необходимо проделать определенную работу.
var objArr = [
{
class: "level-0",
style: undefined
},
{
class: "level-1",
style: undefined
},
{
class: "level-2",
style: undefined
},
{
class: "level-3",
style: undefined
}
];
const stringified = JSON.stringify(
objArr, (k, v) => v === undefined ? "undefined" : v
).replace(/"undefined"/g, "undefined");
$(".temp-div").attr('div-properties', stringified);
console.log(stringified); // testing 1-2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="temp-div">
Temp div here
</div>
Подумайте о замене undefined на null
для получения допустимой разбираемой строки JSON.Вот как вы можете возродить такую структуру:
var objArr = [
{
class: "level-0",
style: undefined
},
{
class: "level-1",
style: undefined
},
{
class: "level-2",
style: undefined
},
{
class: "level-3",
style: undefined
}
];
const stringified = JSON.stringify(
objArr, (k, v) => v === undefined ? null : v
);
$(".temp-div").attr('div-properties', stringified);
/* ... later on in your code ... */
const parsed = JSON.parse($('.temp-div').attr('div-properties'));
parsed.forEach(e =>
Object.keys(e).forEach(f => e[f] = e[f] === null ? undefined : e[f])
);
console.log(parsed);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="temp-div">
Temp div here
</div>