当前位置: 首页 > 面试题库 >

JavaScript根据属性值过滤对象数组

徐旻
2023-03-14
问题内容

我在javascript中有一组对象。内容看起来像这样;

obj_array = [{
        "DATA_ID": 1,
        "DATA_NAME": "Dim",
        "DATA_BB_TYP": 2,
        "DATA_MAC": "5474",
    },
    {
        "DATA_ID": 3,
        "DATA_NAME": "Spre",
        "DATA_BB_TYP": 33,
        "DATA_MAC": "8e30",
    },
    {
        "DATA_ID": 2,
        "DATA_NAME": "Dimb",
        "DATA_BB_TYP": 2,
        "DATA_MAC": "45e8",
    },
    {
        "DATA_ID": 4,
        "DATA_NAME": "Kht1",
        "DATA_BB_TYP": 35,
        "DATA_MAC": "58d0",
    },
    {
        "DATA_ID": 6,
        "DATA_NAME": "Sens",
        "DATA_BB_TYP": 34,
        "DATA_MAC": "d004",
    }
]

我想保留一些对象并删除其余的对象。如果object属性DATA_BB_TYP为2或34,则将保留对象。其他对象被删除。obj_array遗嘱的结果看起来像这样;

obj_array_retained = 
[{
        "DATA_ID": 1,
        "DATA_NAME": "Dim",
        "DATA_BB_TYP": 2,
        "DATA_MAC": "5474",
    },
    {
        "DATA_ID": 2,
        "DATA_NAME": "Dimb",
        "DATA_BB_TYP": 2,
        "DATA_MAC": "45e8",
    },
    {
        "DATA_ID": 6,
        "DATA_NAME": "Sens",
        "DATA_BB_TYP": 34,
        "DATA_MAC": "d004",
    }
]

我正在使用node.js v6.91。

编辑:有人建议我使用过滤器来解决这种问题。欢迎使用过滤器技术的答案。


问题答案:

您可以尝试以下方法1和2:

方法1 :(使用filter

注意:这将返回一个新数组,并且不会修改原始数组

var obj_array = [{

            "DATA_ID": 1,

            "DATA_NAME": "Dim",

            "DATA_BB_TYP": 2,

            "DATA_MAC": "5474",

        },

        {

            "DATA_ID": 3,

            "DATA_NAME": "Spre",

            "DATA_BB_TYP": 33,

            "DATA_MAC": "8e30",

        },

        {

            "DATA_ID": 2,

            "DATA_NAME": "Dimb",

            "DATA_BB_TYP": 2,

            "DATA_MAC": "45e8",

        },

        {

            "DATA_ID": 4,

            "DATA_NAME": "Kht1",

            "DATA_BB_TYP": 35,

            "DATA_MAC": "58d0",

        },

        {

            "DATA_ID": 6,

            "DATA_NAME": "Sens",

            "DATA_BB_TYP": 34,

            "DATA_MAC": "d004",

        }

    ];



    var retained = [2, 34];



    var new_obj_array = obj_array.filter(function(obj) {

      if(retained.indexOf(obj.DATA_BB_TYP) === -1) {

        return false;

      }



      return true;

    });



    console.log(new_obj_array);

方法2 :(基本版本,如果您打算在浏览器中使用此版本,因为filter旧版本的浏览器将不支持该版本)

var obj_array = [{

        "DATA_ID": 1,

        "DATA_NAME": "Dim",

        "DATA_BB_TYP": 2,

        "DATA_MAC": "5474",

    },

    {

        "DATA_ID": 3,

        "DATA_NAME": "Spre",

        "DATA_BB_TYP": 33,

        "DATA_MAC": "8e30",

    },

    {

        "DATA_ID": 2,

        "DATA_NAME": "Dimb",

        "DATA_BB_TYP": 2,

        "DATA_MAC": "45e8",

    },

    {

        "DATA_ID": 4,

        "DATA_NAME": "Kht1",

        "DATA_BB_TYP": 35,

        "DATA_MAC": "58d0",

    },

    {

        "DATA_ID": 6,

        "DATA_NAME": "Sens",

        "DATA_BB_TYP": 34,

        "DATA_MAC": "d004",

    }

];



var retained = [2, 34];



for(var i = obj_array.length - 1; i >= 0; i--) {

  var obj = obj_array[i];

  if(retained.indexOf(obj.DATA_BB_TYP) === -1) {

    obj_array.splice(i, 1);

  }

}



console.log(obj_array);


 类似资料:
  • 问题内容: 我有以下JavaScript数组的房地产主页对象: 我想做的是能够对对象执行过滤,以返回“家庭”对象的子集。 例如,我想根据能够过滤:,,,和。 如何在JavaScript中执行类似下面的伪代码的操作: 注意,语法不必与上面完全相同。这只是一个例子。 问题答案: 您可以使用以下方法: 现场示例: 此方法是新ECMAScript 5th Edition标准的一部分,几乎可以在所有现代浏览

  • 问题内容: jsfiddle http://jsfiddle.net/KfSBq/ 所谓子对象,是指我用ng-repeat显示的所有对象在其内部都包含一个对象列表,并且我希望根据这些子对象之一的属性进行过滤。 仅此一项就非常简单。我有个对象,每个对象都包含和对象列表: 我按类别显示它们: 我的问题是现在仍然显示不包含任何条目的日常对象。如何实现一种情况,如果过滤使列表为空,则该列表也不显示? 问题

  • 问题内容: 是否可以通过多个值过滤对象数组? 例如,在下面的示例中,我可以按term_ids 5和6进行过滤,然后同时键入car吗? 如果可以轻松使用,肯定可以使用库。 问题答案: 您可以使用Array.filter

  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 问题内容: 我有一系列对象,我想知道搜索它的最佳方法。给定以下示例,我如何搜索和?jQuery有什么可以帮助的吗?还是我必须自己蛮力搜​​索? 问题答案: 您可以使用:

  • 问题内容: 我有一个像这样的对象数组: 如何根据其属性删除特定的? 例如,我将如何删除以’money’作为字段属性的数组对象? 问题答案: 一种可能性: 请注意,这将创建一个新数组。尽管您使用新的引用更新了原始变量,但其他任何引用原始数组的变量都不会获取过滤后的数据。请谨慎使用。