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

时间:2016-03-11 14:47:34

标签: javascript javascript-objects

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

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上执行循环,找到'key'包含'cart'

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

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

  • 包含'cart'的键
  • 并且具有类型结构,例如,从上面开始,cartNocartId不是类型结构。
  • 将'cart'结构类型输入到cartItems;

4 个答案:

答案 0 :(得分:3)

像这样?

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)

答案 1 :(得分:2)

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

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

希望它有所帮助!

答案 2 :(得分:2)

您只需要首先过滤包含“cart”的键的对象,并引用“object”类型的属性。然后将它们映射到引用的对象。这将产生一个对象数组。

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

答案 3 :(得分:0)

你可以这样做

 Formula Error: Unexpected operator '='