Javascript 尝试在包含对象的数组中循环以匹配数据
我试图编写代码,循环遍历数组“productsArray”,并将其与我的productPropertyArray匹配,以提取匹配信息 然而,productsArray是数组中的一个数组,它包含一个包含数据的对象。我的问题是如何循环两个数组,然后返回匹配的数据 当前功能:Javascript 尝试在包含对象的数组中循环以匹配数据,javascript,arrays,loops,Javascript,Arrays,Loops,我试图编写代码,循环遍历数组“productsArray”,并将其与我的productPropertyArray匹配,以提取匹配信息 然而,productsArray是数组中的一个数组,它包含一个包含数据的对象。我的问题是如何循环两个数组,然后返回匹配的数据 当前功能: var pList = productsArray if (productPropertyArray.length === 0 || productsArray.length === 0) return [];
var pList = productsArray
if (productPropertyArray.length === 0 || productsArray.length === 0) return [];
for (var i = 0; i < pList.length; i++) {
for (var j = 0; j < pList[i].length; j++) {
if (pList[i][j] === productPropertyArray) {
return productPropertyArray;
} else {
continue;
}
}
}
return [];
};
productPropertyArray示例:(它是一个被以下内容替换的参数)
productPropertyArray
只是函数中的一个参数,它被productSKUArray
替换。设置如下:函数(productProperty,productPropertyArray,productsArray){
productProperty
只是一个包含sku或productID的字符串
任何想法都非常感谢。谢谢。如果内部
需要参考pList[i][j]
,这将输出[{sku:131674},{sku:84172}]
但这只是暴力解决方案。请查看:
.filter
将返回包含对象的所有数组,这些对象的值来自productSKUArray
请参阅和以获取方法参考。您能给出pList示例和ProductPropertyArray吗?很抱歉!示例添加了关于ProductPropertyArray的内容?下面的示例是进入函数的数组示例。因此,您的匹配将来自ProductPropertyArray
,看起来非常像productSKUArray
对吗?很酷。你能解释一下你的代码吗。我是说你在为将来的阅读案例做些什么。:)投票通过了。@Phoenix完成了。@TimeDead这可能不是最有效的方法,但它可读性强,并且很好地使用了“functional JS”。为了改进,你可以从find()
(就像上一个带有.indexOf
)的,从而在重新定义函数时节省一些内存和CPU时间。@veritas我认为OP应该更改其数据结构以减少计算时间。目前是O(n3)。当前的数据数组只是单元测试模拟数据。感谢您的建议。
productsArray = [
[{"sku" : "131674"},
{"sku" : "84172"}],
[{"productID" : "1234"}
,{"productID" : "12345"}],
[{"test": 1},{"test": 1}],
[{"test": 1},{"sellAlone": false,"test": 1}],
[{"test": 1}],
[{"sellAlone": false,"test": 1}]
];
productSKUArray = [
"00544MF24F575",
"131674",
"84172"
];
var matchingData = [];
for(var productProperties in productsArray){
var pp = productsArray[productProperties];
for(var property in pp) {
var p = pp[property];
for(var propertyName in p){
var propertyValue = p[propertyName];
for(var i in productSKUArray){
if(propertyValue == productSKUArray[i]){
matchingData.push(p);
break;
}
}
}
}
}
function find() {
var productsArray = [
[{"sku" : "131674"},
{"sku" : "84172"}],
[{"productID" : "1234"}
,{"productID" : "12345"}],
[{"test": 1},{"test": 1}],
[{"test": 1},{"sellAlone": false,"test": 1}],
[{"test": "00544MF24F575"}],
[{"sellAlone": false,"test": 1}]
],
pList = productsArray,
productSKUArray = [
"00544MF24F575",
"131674",
"84172"
];
// All arrays matching your productsSKUArray
var findings = productsArray.filter(function (productProperty) {
// .some returns true after finding first matching element (and breaks the loop)
return productProperty.some(function (obj) {
var keys = Object.keys(obj);
// We need to get all the "values" from object so we interate over
// the keys and check if any value matches something from productSKUArray
return keys.some(function (key) {
// Check if value exists in productsSKUArray
return productSKUArray.indexOf(obj[key]) > -1;
});
});
});
return findings;
}
console.log(find());