从 javascript 对象数组中选择对象的子集

Select subset of objects from javascript object array

本文关键字:对象 子集 选择 数组 javascript      更新时间:2023-09-26

我有一长串对象:

var myObj = {
  a: "aaa",
  b: "bbb",
  c: "ccc",
  d: "ddd",
  ...
}

我想创建一个新的对象数组,该数组由除前两个对象之外的每个对象组成:

var myObj2 = {
  c: "ccc",
  d: "ddd",
  ...
}

显然myObj.slice(2)不起作用(正如我希望的那样),而且我无法按名称(myObj.c, myObj.d, etc)选择它们,因为有 100 多个对象,并且可能要添加更多对象。

在对象数组中选择一系列对象的最佳方法是什么?

你可能想要重构它,但这里有一个通用的方法。

首先,下面是带有一些可排序键的对象:

var obj = {B201: "apple", B342: "orange", B123: "pear"}

然后在排序后创建一个包含前两个键的数组:

var arr = Object.keys(obj).sort().slice(0,2);

这将返回["B123", "B201"]

定义一个基于键名称删除对象属性的函数:

function remove (e, i, a) {delete obj[e];};

然后为每个属性调用该函数:

arr.forEach(remove);

您应该删除带有"前两个"属性的对象:

Object {B342: "orange"}
您可以使用

以下方法删除您不需要的键

var myObj = {a: "aaa",b: "bbb",c: "ccc",d: "ddd"}
function filterObject(obj,filterObject){
    var newObj = {}
    for(key in obj){
        if(!filterObject[key]){
            newObj[key] = obj[key];
        }
    }
    return newObj;
}
console.log(filterObject(myObj,{a:true,b:true}))

示例输出:

{ c: 'ccc', d: 'ddd' }

假设你有一个这样的对象数组

myObj = [
                {
                  a: "aaa",
                  b: "bbb",
                  c: "ccc",
                  d: "ddd",
                  ...
                },
                {
                  a: "aaa",
                  b: "bbb",
                  c: "ccc",
                  d: "ddd",
                  ...
                },
                {
                  a: "aaa",
                  b: "bbb",
                  c: "ccc",
                  d: "ddd",
                  ...
                },
                {
                  a: "aaa",
                  b: "bbb",
                  c: "ccc",
                  d: "ddd",
                  ...
                },
            ];

现在为主阵列运行一个循环

在该内部循环遍历数组中的每个对象。每回合递增一个计数器并检查它是否大于 2,然后再次将其插入主数组myObj

$.each(myObj, function( index, value ) {
    var counter = 0;
    $.each(value, function( index2, value2 ) {
        counter++;
        if(counter > 2){
            myObj[] = value;
        }
    });
});

如果你对对象的主数组有不同的结构,那么 会有轻微的变化