Javascript 尝试在包含对象的数组中循环以匹配数据

Javascript 尝试在包含对象的数组中循环以匹配数据,javascript,arrays,loops,Javascript,Arrays,Loops,我试图编写代码,循环遍历数组“productsArray”,并将其与我的productPropertyArray匹配,以提取匹配信息 然而,productsArray是数组中的一个数组,它包含一个包含数据的对象。我的问题是如何循环两个数组,然后返回匹配的数据 当前功能: var pList = productsArray if (productPropertyArray.length === 0 || productsArray.length === 0) return [];

我试图编写代码,循环遍历数组“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 [];
    };
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());