我尝试编写将循环遍历数组“productsArray”的代码,并将其与我的productPropertyArray匹配以提取匹配信息。
但productsArray是一个数组中的数组,其中包含一个包含数据的对象。我的问题是我如何遍历两个数组然后返回匹配的数据。
当前功能:
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 [];
};
pList的例子:
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}]
];
productPropertyArray的示例:(其参数由以下内容替换)
productSKUArray = [
"00544MF24F575",
"131674",
"84172"
];
productPropertyArray
只是函数中的一个参数,被productSKUArray
替换。设置如下:function(productProperty, productPropertyArray, productsArray) {
productProperty
只是一个包含sku或productID的字符串
任何想法都表示赞赏。感谢。
答案 0 :(得分:1)
检查出来:
http://jsfiddle.net/v9d7bjms/2/
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());
.filter
将返回包含值为productSKUArray
的对象的所有数组。
请参阅Array.prototype.filter,Array.prototype.some和Array.prototype.indexOf以获取方法参考。
答案 1 :(得分:0)
内部if
需要引用pList[i][j]
。
答案 2 :(得分:0)
这将输出[{sku:“131674”},{sku:“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;
}
}
}
}
}
但这只是蛮力解决方案。