我需要检查投标人“一个” 在 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"
}
}]
}];
答案 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.');
}