我有一个原型类:
function temp(){
this.a=77;
}
temp.prototype.getValue = function(){
console.log(this.a);
}
和一个json对象数组:
var x=[{a:21},{a:22},{a:23}];
有没有办法直接使用json对象数组实例化一个类temp
数组,其方式与使用Jackson TypeReference在Java中通过泛型帮助我们实现的方式类似。
var y= new Array(new temp());
//something similar to what Object.assign achieves for a single object
因此可以扩展到其他对象集合,如Map<obj1,obj2>
等。
答案 0 :(得分:0)
在Javascript中没有内置的方法可以做到这一点。通过对您的数据或构造函数的一些假设,您可以相当简单地创建自己的函数来创建这样的数组:
// pass the constructor for the object you want to create
// pass an array of data objects where each property/value will be copied
// to the newly constructed object
// returns an array of constructed objects with properties initialized
function createArrayOfObjects(constructorFn, arrayOfData) {
return arrayOfData.map(function(data) {
let obj = new constructorFn();
Object.keys(data).forEach(function(prop) {
obj[prop] = data[prop];
});
return obj;
});
}
或者,您可以创建一个构造函数,该构造函数接收数据对象,然后从该对象初始化自身:
// pass the constructor for the object you want to create
// pass an array of data objects that will each be passed to the constructor
// returns an array of constructed objects
function createArrayOfObjects(constructorFn, arrayOfData) {
return arrayOfData.map(function(data) {
return new constructorFn(data);
});
}
// constructor that initializes itself from an object of data passed in
function Temp(data) {
if (data && data.a) {
this.a = data.a;
}
}
答案 1 :(得分:0)
您可以直接使用Temp
Array.from
的实例填充数组。
function Temp(){
this.a=77;
}
Temp.prototype.getValue = function(){
console.log(this.a);
}
var array = Array.from({ length: 5 }, _ => new Temp);
array[0].a = 42;
console.log(array);
答案 2 :(得分:0)
如果您使用的是NPM,我强烈推荐linq-collections
这类包装。