通过在node.js中

时间:2018-01-31 07:50:35

标签: javascript java json node.js jackson

我有一个原型类:

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>等。

3 个答案:

答案 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这类包装。

https://www.npmjs.com/package/linq-collections