我有一个包含对象列表的数组:
var myArray = [
{"cartItems": {"paramA1": 25, "paramA2": 35}},
{"cartShippingCost": {"paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56}},
{"cartSpecialRequirements": {"paramC1": 432}},
{"cartPostage": {"paramD1": 56, "paramD2": 6537}},
{"uid": {"paramE1": 545}},
{"tel": 7778798548}
];
如何循环使用包含'cart'
的上述和组对象以及不包含{?1}的对象?
我知道我需要创建2个临时对象,例如
var cartObj;
var nonCartObj;
如果符合条件,则执行.push到每个。
尝试:
for(var i in myArray) {
if (i == 'cart') {
console.log('cart match found');
}
}
更新
使用Object.keys总是遇到else case:
var key = Object.keys(item);
if (key.indexOf("cart") !== -1) {
alert(key + " contains cart");
} else {
alert(key + " doesnt contain cart");
}
答案 0 :(得分:3)
您可以使用Array.prototype.filter
创建一个新数组,其中每个项目都满足某些条件:
var cartItems = myArray.filter(hasCartProperty);
var nonCartItems = myArray.filter(function (x) { return !hasCartProperty(x); });
// Checks to see if any of the object's keys contain the text 'cart'
function hasCartProperty(x) {
return Object.keys(x).some(function (x) {
return x.indexOf('cart') > -1;
});
}
答案 1 :(得分:2)
循环遍历数组的每个项目,然后在该循环内迭代对象键以找到您要查找的内容
var result = [];
myArray.forEach(function (item) {
for (var key in item) {
if (key.indexOf('cart') !== -1) {
result.push(item);
}
}
});
console.log(result);
答案 2 :(得分:0)
JavaScript Array对象有filter function可用于此目的。
棘手的部分是执行过滤的功能。一种方法是迭代对象中的键以检测哪些键包含" cart"密钥。
var myArray = [
{"cartItems": {"paramA1": 25, "paramA2": 35}},
{"cartShippingCost": {"paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56}},
{"cartSpecialRequirements": {"paramC1": 432}},
{"cartPostage": {"paramD1": 56, "paramD2": 6537}},
{"uid": {"paramE1": 545}},
{"tel": 7778798548}
];
var cartObj = myArray.filter(function (x) { return isCart(x); });
var nonCartObj = myArray.filter(function (x) { return !isCart(x); });
console.log("cart count = " + cartObj.length + ", non-cart count = " + nonCartObj.length);
function isCart(x) {
for (var key in x) {
if (x.hasOwnProperty(key) && key.startsWith("cart")) {
return true;
}
}
return false;
}

答案 3 :(得分:0)
一个没有Array#filter()
的循环的解决方案。
var myArray = [{ "cartItems": { "paramA1": 25, "paramA2": 35 } }, { "cartShippingCost": { "paramB1": 4, "paramB2": 152, "paramB3": 536, "paramB4": 56 } }, { "cartSpecialRequirements": { "paramC1": 432 } }, { "cartPostage": { "paramD1": 56, "paramD2": 6537 } }, { "uid": { "paramE1": 545 } }, { "tel": 7778798548 }],
grouped = function (array) {
var r = { cart: [], nonCart: [] };
array.forEach(function (a) {
Object.keys(a).some(function (k) {
if (k.indexOf('cart') === 0) {
return r.cart.push(a);
}
}) || r.nonCart.push(a);
});
return r;
}(myArray);
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
&#13;