繁体   English   中英

函数从对象数组中删除对象属性

[英]function to remove object properties from an array of objects

在JS中;

尝试编写一个函数,该函数需要一个对象数组和一系列参数。 该函数将删除任何未作为参数给出的属性。

示例:输入cleanseData([{a:'b',c:'d'},{a:'q'}],'a');

输出[{a:'b'},{a:'q'}]

这是尝试过的函数,但对象保持不变。

var cleanseData = function(listObj, key1, key2, key3) {
    for (var i=0; i<listObj.length; i++) {
        for(k in listObj[i]) {
            if(k !== key1 && k!==key2 && k!==key3) {
            delete listObj[i].k;
            }
        }
    }
    return listObj;
}

在这条线...

delete listObj[i].k;

它正在尝试删除不存在的属性k 改成...

delete listObj[i][k];

小提琴

var cleanseData = function (listObj,key) {
    for (var i = 0;i < listObj.length; i++) {
        for(var k in listObj[i])
        if (k!=key) {
            delete listObj[i][k];
        }
    }
    return listObj;
}
console.log(JSON.stringify(cleanseData([{a: 'b', c:'d'}, {a: 'q'}], 'a')));

DEMO

作为样式,您可以执行以下操作

function cleanse(arr, proplist) {
  return arr.map(function(elem) {
     var props = Object.keys(elem);
     var props_to_remove = props.filter(function(p) {
      return proplist.indexOf(p) === -1;
     }); 
     props_to_remove.forEach(function(p) {
         delete elem[p];
     })
     return elem;
    });
}    

请注意,这将返回一个满足您条件的新数组,并且不会修改您传入的旧数组。

暂无
暂无

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

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