根据 属性 名称和类型对对象进行分组

Group objects based on property name and type

我有一个如下所示的数组;

var myArray = {
    "cartItems": {"paramA1": 25, "paramA2": 35},
    "cartShippingCost": {"paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56},
    "cartNo": 675765,
    "cartSpecialRequirements": {"paramC1": 432},
    "cartPostage": {"paramD1": 56, "paramD2": 6537},
    "cartId": 54,
    "tel": 7778798548,
    "status": 5465465,
    "delivery": 65464646686674
};

var cartItems;

我在 myArray 上执行循环以查找键包含 'cart'

的对象
for (var key in myArray) {
    if (myArray.hasOwnProperty(key)) {
        if (key.indexOf('cart') > -1) {
            alert(key + " -> " + o[key]);
        }
    }
}

效果很好。我要检索对象:

您可以使用 typeof(var) 检查变量是否为对象(如您所说的结构)。在你的情况下,你可以在你的循环中做这样的事情:

if (typeof(myArray[key]) == 'object')
{
    // do something
}

希望对您有所帮助!

您只需要先过滤您的对象以查找包含 'cart' 且它们引用类型 'object' 的属性的键。然后将它们映射到引用的对象。这将产生一个对象数组。

var cartItems = Object.keys(myArray)
    .filter(key => {
        return key.indexOf('cart') > -1 && typeof myArray[key] === 'object';
    })
    .map(key => {
        return myArray[key];
    });

像这样?

var data = {
    "cartItems": {"paramA1": 25, "paramA2": 35},
    "cartShippingCost": {"paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56},
    "cartNo": 675765,
    "cartSpecialRequirements": {"paramC1": 432},
    "cartPostage": {"paramD1": 56, "paramD2": 6537},
    "cartId": 54,
    "tel": 7778798548,
    "status": 5465465,
    "delivery": 65464646686674
}

var cartObjects = [];
for(var k in data){
    var v = data[k];
    if(v && typeof v === "object" && k.indexOf("cart") !== -1 && data.hasOwnProperty(k)){
        cartObjects.push(v);
    }
}

console.log(cartObjects)

你可以这样做

var myArray = {
    "cartItems": {"paramA1": 25, "paramA2": 35},
    "cartShippingCost": {"paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56},
    "cartNo": 675765,
    "cartSpecialRequirements": {"paramC1": 432},
    "cartPostage": {"paramD1": 56, "paramD2": 6537},
    "cartId": 54,
    "tel": 7778798548,
    "status": 5465465,
    "delivery": 65464646686674
};

var result = Object.keys(myArray).reduce(function (p, c) { 
  var value = myArray[c]; 
  if (c === "cartItems" || c.indexOf("cart") < 0) { return p; }
  
  if (["string", "number", "boolean"].indexOf(typeof value) > -1) {
    p.push(value);
  }
  return p;
}, []);

document.write(JSON.stringify(result));