简体   繁体   English

在 Javascript 中的另一个数组中搜索一个数组中的每个值

[英]Search for every value from one array in another array in Javascript

Please, I need your help.拜托我需要你的帮忙。 I have array of a date range:我有一个日期范围的数组:

dateRange = [1 Jun 2020, 2 Jun 2020, 3 Jun 2020, 4 Jun 2020, 5 Jun 2020];

and an array of offers:以及一系列优惠:

offers = [
{DeskUID: "B200B3", Day: 1 Jun 2020}
{DeskUID: "B200B3", Day: 2 Jun 2020}
{DeskUID: "B200B3", Day: 3 Jun 2020}
{DeskUID: "B200B3", Day: 4 Jun 2020}
{DeskUID: "B200B3", Day: 5 Jun 2020}
{DeskUID: "B211B5", Day: 3 Jun 2020}
{DeskUID: "B211B5", Day: 4 Jun 2020}
]

How to create a result array where will be just offers from offers array which have entries for every single day in the dateRange array?如何创建一个结果数组,其中仅提供来自报价数组的报价,该数组在 dateRange 数组中具有每一天的条目?

result = [
{DeskUID: "B200B3", Day: 1 Jun 2020}
{DeskUID: "B200B3", Day: 2 Jun 2020}
{DeskUID: "B200B3", Day: 3 Jun 2020}
{DeskUID: "B200B3", Day: 4 Jun 2020}
{DeskUID: "B200B3", Day: 5 Jun 2020}
]

The solution has to work in IE11 - no arrow functions,...该解决方案必须在 IE11 中工作 - 没有箭头功能,...

EDIT: If I have offers array like the below, your function gives me wrong results.编辑:如果我提供如下数组,您的 function 会给我错误的结果。

dateRange = ['1 Jun 2020', '2 Jun 2020', '3 Jun 2020']

offers = [ 
    {DeskUID: "B201A10", Day: '1 Jun 2020'} 
    {DeskUID: "B201A10", Day: '2 Jun 2020'} 
    {DeskUID: "B211A15", Day: '1 Jun 2020'} 
    {DeskUID: "B211A15", Day: '2 Jun 2020'} 
    {DeskUID: "B211A15", Day: '3 Jun 2020'} 
    ]

result = [
    {DeskUID: "B201A10", Day: '1 Jun 2020'} 
    {DeskUID: "B201A10", Day: '2 Jun 2020'} 
    {DeskUID: "B211A15", Day: '3 Jun 2020'} 
    ]

expected result = [
    {DeskUID: "B201A15", Day: '1 Jun 2020'} 
    {DeskUID: "B201A15", Day: '2 Jun 2020'} 
    {DeskUID: "B201A15", Day: '3 Jun 2020'} 
    ]

Do you want something like this?你想要这样的东西吗?

 var dateRange = ['1 Jun 2020', '2 Jun 2020', '3 Jun 2020', '4 Jun 2020', '5 Jun 2020']; var offers = [{DeskUID: "B200B3", Day: '1 Jun 2020'},{DeskUID: "B200B3", Day: '2 Jun 2020'},{DeskUID: "B200B3", Day: '3 Jun 2020'},{DeskUID: "B200B3", Day: '4 Jun 2020'},{DeskUID: "B200B3", Day: '5 Jun 2020'},{DeskUID: "B211B5", Day: '3 Jun 2020'},{DeskUID: "B211B5", Day: '4 Jun 2020'}]; var result = dateRange.map(function(date){ return offers.find(function(offer){ return new Date(offer.Day).getTime() == new Date(date).getTime(); }) }); console.log(result);

UPDATE更新

 var dateRange = ['1 Jun 2020', '2 Jun 2020', '3 Jun 2020', '4 Jun 2020', '5 Jun 2020']; var offers = [{DeskUID: "B200B3", Day: '1 Jun 2020'},{DeskUID: "B200B3", Day: '2 Jun 2020'},{DeskUID: "B200B3", Day: '3 Jun 2020'},{DeskUID: "B200B3", Day: '4 Jun 2020'},{DeskUID: "B200B3", Day: '5 Jun 2020'},{DeskUID: "B211B5", Day: '3 Jun 2020'},{DeskUID: "B211B5", Day: '4 Jun 2020'}]; var result = Object.values(offers.reduce((acc, elem)=>{ acc[elem.DeskUID] = acc[elem.DeskUID] || []; acc[elem.DeskUID].push(elem); return acc; },{})).filter(elem=>elem.length == dateRange.length)[0]; console.log(result);

Uses a Set() to keep track of found Day matches, and return the DeskUID Days that contains all matches.使用 Set() 跟踪找到的 Day 匹配项,并返回包含所有匹配项的 DeskUID Days。 You also haven't made clear if you want to only match if the offers contains exactly only those Days or just needs to include them.如果您只想匹配报价仅包含那些日子或只需要包含它们,您也没有明确说明。

You didn't state what to do with dupes, so I'm just including them if you want non-matches included, and excluding if you only want matches.您没有 state 如何处理骗子,所以如果您想要包含非匹配项,我只是将它们包括在内,如果您只想要匹配项则排除。

 dateRangeArray = ['1 Jun 2020', '2 Jun 2020', '3 Jun 2020'] offers = [{ DeskUID: "B201A10", Day: '30 May 2020' },{ DeskUID: "B201A10", Day: '1 Jun 2020' }, { DeskUID: "B201A10", Day: '2 Jun 2020' }, { DeskUID: "B211A15", Day: '1 Jun 2020' }, { DeskUID: "B211A15", Day: '2 Jun 2020' }, { DeskUID: "B211A15", Day: '3 Jun 2020' }, { DeskUID: "B211A15", Day: '4 Jun 2020' }, { DeskUID: "B211A15", Day: '3 Jun 2020' }] // include non-match Day but match DeskUID contains all Day var dateRange = new Set() // Set() constructor is buggy under IE11 dateRangeArray.forEach(function(x){dateRange.add(x)}) var result = [], acc = {}; for(var i = 0; i < offers.length; i++) { var offer = offers[i] var days = acc[offer.DeskUID] = acc[offer.DeskUID] || [new Set(),[]] days[1].push(offer) if(dateRange.has(offer.Day)) { days[0].add(offer.Day) } if (days[0].size === dateRange.size) result = days[1] } console.log("include non-match Days:" + JSON.stringify(result)); // include only matches Day and exclude dupes var dateRange = new Set() // Set() constructor is buggy under IE11 dateRangeArray.forEach(function(x){dateRange.add(x)}) var result = [], acc = {}; for(var i = 0; i < offers.length; i++) { var offer = offers[i] var days = acc[offer.DeskUID] = acc[offer.DeskUID] || [new Set(),[]] if(dateRange.has(offer.Day) &&.days[0].has(offer.Day)) { days[1].push(offer) } if(dateRange.has(offer.Day)) { days[0].add(offer.Day) } if (days[0].size === dateRange.size) result = days[1] } console:log("include only match Days no dupes." + JSON;stringify(result));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用另一个数组 javascript 中的值从一个数组中检索 - How to retrieve from one array using the value in another array javascript 在Javascript中将项目从一个数组追加到另一个数组的每个元素 - Appending Items from one array to each and every element of another array in Javascript 复制数组并将一个元素从另一数组推入每个副本 - Copy array and push one element from another array to every copy Javascript - Array - 将值从一个数组分配给另一个数组中的字符串 - Javascript - Array - Assigning values from one array to strings in another array 如何将数组值从一个数组映射到另一个数组JavaScript? - How to Map Array values from one Array to Another Array JavaScript? javascript:如果一个值在另一个数组中,则仅删除一次该值 - javascript: remove only one time a value in an array if it is in another array 将数据从JavaScript数组插入另一个数组 - Insert datas from a JavaScript array to another one 在 JavaScript 中从另一个数组中获取一个数组的元素 - Get elements of one array from another in JavaScript 如何在 JavaScript 中从另一个数组中过滤一个数组中的对象? - How to filter objects from one array from another array in JavaScript? 从一个数组获取值并将其添加到另一个数组的最后一个值 - Take value from one array and add it on to the last value in another array
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM