根据 属性 名称和类型对对象进行分组
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]);
}
}
}
效果很好。我要检索对象:
- 键包含 'cart'
- and 是类型结构,e.g.from 以上,
cartNo
和 cartId
不是类型结构。
- 将 'cart' 结构类型推送到 cartItems;
您可以使用 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));
我有一个如下所示的数组;
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]);
}
}
}
效果很好。我要检索对象:
- 键包含 'cart'
- and 是类型结构,e.g.from 以上,
cartNo
和cartId
不是类型结构。 - 将 'cart' 结构类型推送到 cartItems;
您可以使用 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));