简体   繁体   English

使用Javascript将对象(元素)向上移动一步

[英]Move an object (element) one step up with Javascript

I have several objects like this: 我有几个像这样的对象:

在此输入图像描述

I want to move type and value one step up so they will be next to field , and then delete data . 我想将typevalue向上移动一步,以便它们将在field旁边,然后删除data
It looks like this when departments is converted to JSON: departments转换为JSON时看起来像这样:

[
    {"field"    : "DEPARTMAN_NO",
     "data"     : { "type":"numeric" , "comparison":"eq" , "value":11 }
    },
    {"field"    : "DEPARTMAN_ADI",
     "data"     : { "type":"string" , "value":"bir" }
    }
]

I have tried: 我试过了:

departments = grid.filters.getFilterData();
i = {};
for(var i in department) {
department = i.data;
delete.department.data;
};

but it dosen't work. 但它不起作用。

1) First, loop departments , each item we call it department ; 1)首先,循环departments ,我们称之为department每个项目;
2) You want to move department.data 's properties to department , From another angle, you can move department 's properties to department.data and return department.data , code like: 2)您想将department.data的属性移动到department ,从另一个角度来看,您可以将department的属性移动到department.data并返回department.data ,代码如下:

var departments = [{
        "field": "DEPARTMAN_NO",
        "data": {
            "type": "numeric",
            "comparison": "eq",
            "value": 11
        }
    }, {
        "field": "DEPARTMAN_ADI",
        "data": {
            "type": "string",
            "value": "bir"
        }
    }],
    department;

for (var i = 0, len = departments.length; i < len; i++) {
    department = departments[i]; // department
    for (var key in department) {
        if (key !== 'data' && department.data) {
            department.data[key] = department[key];
        }
    }
    departments[i] = department.data || department; // if no department.data, no change
}

console.log(departments);

result: 结果:

在此输入图像描述

view the full demo http://jsfiddle.net/KVYE5/ 查看完整演示http://jsfiddle.net/KVYE5/

department.type = department.data.type;
department.value = department.data.value;
delete department['data'];
obj =
[
    {"field"    : "DEPARTMAN_NO",
     "data"     : { "type":"numeric" , "comparison":"eq" , "value":11 }
    },
    {"field"    : "DEPARTMAN_ADI",
     "data"     : { "type":"string" , "value":"bir" }
    }
];


for ( var item in obj ) {
    if ( obj[item].field && obj[item].data ) { //check the 'field' and 'data' exist
        obj[item].field = {
            dept : obj[item].field ,         //department name is put into a property
            type : obj[item].data.type,      //so is data.type and data.value..
            value: obj[item].data.value      //..all are now contained in 'field'
        };
        delete obj[item].data;               //remove the 'data' object
    }
}

console.log(obj);

I wrote a little npm package that does what you're asking for: moving a property up a level in an object. 我写了一个小的npm包,它可以满足您的要求:将属性移动到对象中的某个级别。

You can get it here: https://www.npmjs.com/package/move-property-up-a-level 你可以在这里找到它: https//www.npmjs.com/package/move-property-up-a-level

Usage 用法

var movePropertyUpALevel = require('movePropertyUpALevel');

var fakeObj = {
    poodle: {
        first: {
            hey: 'you'
        },
        second: 'meAgain'
    }
};

movePropertyUpALevel(fakeObj, 'poodle');

console.log(fakeObj.first.hey);
//'you'
console.log(fakeObj.poodle);
//undefined

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM