在JavaScript中从另一个对象创建对象

3

我有一个对象,例如:

cols : [Object { name="firstname", type="string"}, Object { name="lastname", type="string"}, Object { name="valid", type="checkbox"} ....]

我需要创建一个类似于这个对象的对象:
[
  {
    data: 'firstname'
  },
  {
    data: 'lastname'
  },
  {
    data: 'valid',
    type: checkbox
  }
]

唯一的规则是,如果第一个对象中有type="string",你只需要忽略它(请查看我的第二个对象)。当然,这只是一个例子,所以我需要一些自动化的东西。
我正在尝试处理这个函数:
var headers = data.cols.map(function (el, index) {    
    return el.name;
});

我可以获取el.nameel.type元素。但我不知道如何创建这个特定的对象?我尝试过使用splicepush等方式,但是对于创建多行等操作,我毫无头绪。


抱歉,我正在使用Symfony,但在这个问题上它没有用,你是正确的。 - Clément Andraud
这不是一个有效的对象吗? - adeneo
JSON是一种数据格式,类似于XML或CSV。 - Felix Kling
2个回答

3
您可以使用map函数本身,但需要创建一个新对象,并根据条件添加所有字段,方法如下:
var data = [{
    name: 'firstname',
    type: 'string'
}, {
    name: 'lastname',
    type: 'string'
}, {
    name: 'valid',
    type: 'checkbox'
}];

var result = data.map(function (currentObject) {

    var object = {
        // Create an object with `name` property
        data: currentObject.name
    };

    if (currentObject.type !== 'string') {
        // create `type` property in the `object`, only if type is not `string`
        object.type = currentObject.type;
    }

    return object;
});

console.log(result);

[ { data: 'firstname' },
  { data: 'lastname' },
  { data: 'valid', type: 'checkbox' } ]

应该是 data: currentObject.name,不是吗? - Markai
请注意,初始数组无效,并且其中的对象没有“data”属性,但理论上我认为这可能有效,或者什么? - adeneo
他可以应用这个想法,但我必须自己构建这个对象。现在我也包括了它 :-) - thefourtheye

0
使用 map 函数并根据条件返回。
var result = data.cols.map(function (d, i) {
    if (d.type == "string") 
        return { data: d.name } 
    else 
        return { data: d.name, type: d.type }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接