如果我创建一个这样的关联数组:
var a = [];
a.push("hello");
a["hello"] = "world";
JSON.stringify(a);
并将其序列化为JSON,结果是
“[“你好”]”
如果我创建它就像
var a = {};
a["hello"] = "world";
JSON.stringify(a);
结果是
“{“你好,世界”}”
在JavaScript中是否有一种方法可以像对象变量一样序列化数组变体? 我的意思是没有将所有属性复制到对象中,也没有编写自己的JSON字符串?
如果您只是想以stringify
那些以编程方式推送(a.push("hello");
)或指定(如a["hello"] = "world";
)的属性,那么您可以使用Object.assign
JSON.stringify( Object.assign ( {}, a ) );
演示
var a = [];
a.push("hello");
a["hello"] = "world";
console.log(JSON.stringify( Object.assign ( {}, a ) ));
您可以拆分数组部件和没有数组部件的部件,并在将整个对象串联在一起以重新组装具有自定义属性的新数组。
var a = [];
a.push("hello");
a["hello"] = "world";
var o = Object.assign(...Object.keys(a).map(k => (+k).toString() !== k ? { [k]: a[k] } : {})),
jsonArray = JSON.stringify(a),
jsonObject = JSON.stringify(o);
console.log(a);
console.log(jsonArray);
console.log(o);
console.log(jsonObject);
var combined = Object.assign(JSON.parse(jsonArray), JSON.parse(jsonObject));
console.log(Array.isArray(combined));
console.log(combined);
console.log(Object.keys(combined).map(k => [k, combined[k]]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
我认为这是不可能的(也许我错了),但是当你做a.push('hello')
时,你将值hello
分配给array
的第一个索引。
console.log(a)
Array(
0: "hello"
)
然后,当你执行a["hello"] = "world"
时,你在这里做的是添加一个名为hello
的索引,并为其指定world
的值。
如果你记录它,你会得到:
Array (
0: "hello",
"hello": "world"
)