【问题标题】:JavaScript Retain certain properties and remove other properties from array of objectsJavaScript 保留某些属性并从对象数组中删除其他属性
【发布时间】:2016-11-06 04:01:07
【问题描述】:

我想保留 JavaScript 对象数组中的一些属性。这是对象数组。

obj_array = [{
        "CHR_ID": 1,
        "CHR_NAME": "Jim",
        "CHR_BB_TYP": 2,
        "CHR_MAC": "5474",
    },
    {
        "CHR_ID": 3,
        "CHR_NAME": "Fro",
        "CHR_BB_TYP": 33,
        "CHR_MAC": "8e30",
    },
    {
        "CHR_ID": 2,
        "CHR_NAME": "Jimb",
        "CHR_BB_TYP": 2,
        "CHR_MAC": "45e8",
    },
    {
        "CHR_ID": 4,
        "CHR_NAME": "Kht1",
        "CHR_BB_TYP": 35,
        "CHR_MAC": "58d0",
    },
    {
        "CHR_ID": 6,
        "CHR_NAME": "Sens",
        "CHR_BB_TYP": 34,
        "CHR_MAC": "d004",
    }
]

我有这个字符串数组,它指定要保留的属性。

var str_array_criteria = ["CHR_ID", "CHR_NAME"];

移除后,对象数组如下所示;

obj_array_removed = [{
        "CHR_ID": 1,
        "CHR_NAME": "Jim",        
    },
    {
        "CHR_ID": 3,
        "CHR_NAME": "Fro",
    },
    {
        "CHR_ID": 2,
        "CHR_NAME": "Jimb",
    },
    {
        "CHR_ID": 4,
        "CHR_NAME": "Kht1",
    },
    {
        "CHR_ID": 6,
        "CHR_NAME": "Sens",
    }
]

我正在使用 node.js v6。

【问题讨论】:

  • 您愿意使用 Underscore 吗?
  • 是吗?我对所有解决方案持开放态度。非常感谢。

标签: node.js javascript-objects


【解决方案1】:

给你Object.keys

var obj_array = [{
        "CHR_ID": 1,
        "CHR_NAME": "Jim",
        "CHR_BB_TYP": 2,
        "CHR_MAC": "5474",
    },
    {
        "CHR_ID": 3,
        "CHR_NAME": "Fro",
        "CHR_BB_TYP": 33,
        "CHR_MAC": "8e30",
    },
    {
        "CHR_ID": 2,
        "CHR_NAME": "Jimb",
        "CHR_BB_TYP": 2,
        "CHR_MAC": "45e8",
    },
    {
        "CHR_ID": 4,
        "CHR_NAME": "Kht1",
        "CHR_BB_TYP": 35,
        "CHR_MAC": "58d0",
    },
    {
        "CHR_ID": 6,
        "CHR_NAME": "Sens",
        "CHR_BB_TYP": 34,
        "CHR_MAC": "d004",
    }
];

    var str_array_criteria = ["CHR_ID", "CHR_NAME"];

    obj_array.forEach(function(obj) {
      Object.keys(obj).forEach(function(key){
        if(str_array_criteria.indexOf(key) === -1) {
            delete obj[key];
          }
      });
    });

    //var new_obj_array = obj_array.map(function(obj) {
      //Object.keys(obj).forEach(function(key){
        //if(str_array_criteria.indexOf(key) === -1) {
            //delete obj[key];
          //}
      //});
      
      //return obj;
    //});

    console.log(obj_array);

【讨论】:

  • 我今天真的觉得自己像个傻瓜。非常感谢!你很聪明。我一定会努力提高我的技能。
  • 不像那个伙伴,只是在玩数组和对象的属性和方法。一旦你学会了它们,你就会成为大师:-)
  • 请注意,此解决方案会破坏性地更改原始对象。 map 也没有任何用途——它只是创建一个新数组,其中包含相同(修改过的)元素。
【解决方案2】:

使用下划线,这只是

_.map(obj_array, elt => _.pick(elt, ...str_array_criteria))

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多