搜索位于数组对象中的对象数组

时间:2018-08-16 00:04:59

标签: javascript arrays javascript-objects

我需要检查投标人“一个” arr 中是否已经具有“ placementId”:“ 4” 。 我试图结合没有过滤器的循环过滤器。有解决这个问题的优雅方法吗?

var check = { "one": "4" },
    arr = [{
        "code": "qwe",
        "bids": [{
                "bidder": "one",
                "params": {
                    "placementId": "1"
                }
            },
            {
                "bidder": "two",
                "params": {
                    "placementId": "2"
                }
            }
        ]
    }, {
        "code": "asd",
        "bids": [{
            "bidder": "one",
            "params": {
                "placementId": "3"
            }
        }]
    }];

3 个答案:

答案 0 :(得分:1)

使用此代码:

arr.forEach(element => {
    element.bids.forEach(item=>{
        if(item.bidder == Object.keys(check)[0]){
            if(item.params.placementId == 1){
               console.log("bidder 1 and placementId 1 found");
            }
        }           
    });
});

答案 1 :(得分:1)

我认为find()是到达这里的方法。您想在数组中找到一个出价中的一个元素,其bid.bidder的值为“ 1”,而bid.params.placementId的值为4。如果不存在,则为undefined

这可以用javascript来表示,例如:

let found = arr.find(code => 
            code.bids.some(bid => bid.bidder === "one" && bid.params.placementId === "4"))

因为您只想知道它是否存在,所以您基本上只关心它是否返回某些内容或未定义。这是一个正面和负面的例子:

var check = { "one": "1" },arr = [{"code": "qwe","bids": [{"bidder": "one","params": {"placementId": "1"}},{"bidder": "two","params": {"placementId": "2"}}]}, {"code": "asd","bids": [{"bidder": "one","params": {"placementId": "3"}}]}];

// user one placement id 4 does not exist
let found = arr.find(code => code.bids.some(bid => bid.bidder === "one" && bid.params.placementId === "4"))
console.log(found !==  undefined)

// user two placement id 2 does exist
found = arr.find(code => code.bids.some(bid => bid.bidder === "two" && bid.params.placementId === "2"))
console.log(found !==  undefined)

答案 2 :(得分:1)

var bidders = {};
arr.forEach((field)=>{
    let bidArray = field.bids.map((bids)=>{
        if(bidders[bids.bidder] === undefined){
            bidders[bids.bidder] = [] 
        }

        return {bidder:bids.bidder,placementId:bids.params.placementId};
    })
    for(let placement of bidArray){
        bidders[placement.bidder].push(placement.placementId);
    }
})
console.log(bidders);

列出所有竞标者及其各自的位置

那么您就可以

if(bidders.one.indexOf(4) !== -1){
console.log('Placement 4 is taken by bidder 1.');
}
else{
console.log('Placement 4 is not taken by bidder 1.');
}