javascript - 尝试遍历包含对象数组的数组,以匹配数据

标签 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的字符串 任何想法表示赞赏。谢谢。

最佳答案

检查一下:

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.someArray.prototype.indexOf供方法引用。

关于javascript - 尝试遍历包含对象数组的数组,以匹配数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185135/

相关文章:

Python:如何使用用户输入来关闭或继续 while 循环

java - 为什么我的 "While Loop"没有计算并打印出一个简单的 3N+1 方程?

javascript - HTML5 过渡

javascript - RegExp 等价于 array.indexOf( str )

javascript - 在数组对象中查找字符串值的最简洁方法?

arrays - Matlab:如果索引在一个范围内,则对相应的值求和

javascript - push 方法不返回新数组

javascript - 在 React.js 中向下滚动页面时如何加载更多搜索结果?

java - Sprite ,将位图存储在数组中

java - 更新循环中按钮 onClickListener 中的数组元素 - android