尝试循环包含包含对象的数组的数组,以匹配数据

时间:2014-10-03 19:01:22

标签: javascript arrays loops

我尝试编写将循环遍历数组“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的字符串  任何想法都表示赞赏。感谢。

3 个答案:

答案 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.filterArray.prototype.someArray.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;
                        }

                    }

                }

            }
        }

但这只是蛮力解决方案。