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

时间:2016-02-23 05:03:52

标签: javascript arrays javascript-objects

我有很多对象:

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个对象,并且可能还有更多要添加。

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

3 个答案:

答案 0 :(得分:2)

您可能想要重新构思,但这是一种通用方法。

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

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"}

答案 1 :(得分:1)

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

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;
        }
    });

});
  

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

答案 2 :(得分:1)

您可以使用以下方法删除您不想要的密钥

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' }