Explanation of the problem statement:我有两个数组AB:

A = [
     {
         "isAvailable" : true,
         "productCode" : "12103977",
         "size" : "UK/IND-3",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103977"
      },

      {
         "isAvailable" : true,
         "productCode" : “12103978",
         "size" : "UK/IND-4",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103978"
      },

      {
         "isAvailable" : true,
         "productCode" : "12103979",
         "size" : "UK/IND-8",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103979"
      },

]


B = [
       {
         "dimensionSize" : "3",
         "euroSize" : "36",
         "usSize" : "4"
      },

      {
         "dimensionSize" : "4",
         "euroSize" : "36",
         "usSize" : "4"
      },

      {
         "dimensionSize" : "10",
         "euroSize" : "36",
         "usSize" : "4"
      },
]

我需要在以下条件下创建new array C基准:

Condition : "If the value contained in "101" key of any object in 102 includes the value contained in key "103" of any object in 104 then add the corresponding matching object from 105".

在满足上述条件后,数组C将是这样的-

C = [
      {
         "dimensionSize" : "3", 
         "euroSize" : "36",
         "usSize" : "4"
      },

      {
         "dimensionSize" : "4", 
         "euroSize" : "36",
         "usSize" : "4"
      },
]

Explanation of how array C is obtained :

My motive to find the solution to this problem:我有非常长的数组,我需要运行类似于上面的条件来过滤出新数组中的一些数据.我在堆栈溢出中看到了其他解决方案,并且我使用了数组方法(如filter、includes、some、map等)导出了一个解决方案,但我需要一个对实时数据有效的有效解决方案,如长度巨大的array.

非常感谢在共享有效算法或路径转发方面提供的任何帮助.提前感谢您!

Edit:我现有的以O(n^2)运行的解决方案.假设A和B是问题陈述中的array.matchArray是结果array.

let matchArray;
        matchArray = B.filter(objB => {
            let match = false;
            A.forEach(objA => {
                if (objA.size.includes(objB.dimensionSize) {
                    match = true;
                }
            });
            return match;
        });

Edit 2:数组B和数组C的 struct 不正确.我现在已经改正了.

推荐答案

具有O(n)复杂性的解

const solution = (A, B) => {
  const allowedSizes = new Set()
  
  A.forEach(({ size }) => {
    const [ s ] = size.match(/\d+$/g)
    
    allowedSizes.add(s)
  })
  
  return B.filter(({ dimensionSize }) => {
    return allowedSizes.has(dimensionSize)
  })
}

const A = [
      {
         "isAvailable" : true,
         "productCode" : "12103977",
         "size" : "UK/IND-3",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103977"
      },

      {
         "isAvailable" : true,
         "productCode" : "12103978",
         "size" : "UK/IND-4",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103978"
      },

      {
         "isAvailable" : true,
         "productCode" : "12103979",
         "size" : "UK/IND-8",
         "url" : "/asics-mens-gel-kayano-28-harmony-blue-running-shoes/12103979"
      },

]


const B = [
      {
         "dimensionSize" : "3",
         "euroSize" : "36",
         "usSize" : "4"
      },

      {
         "dimensionSize" : "4",
         "euroSize" : "36",
         "usSize" : "4"
      },

      {
         "dimensionSize" : "10",
         "euroSize" : "36",
         "usSize" : "4"
      },
]

console.log(solution(A, B))

Javascript相关问答推荐

如何在ReactJS中修复这种不需要的按钮行为?

使用复选框在d3.js多折线图中添加或删除线条

React 17与React 18中的不同setState行为

D3 Scale在v6中工作,但在v7中不工作

Next.js(react)使用moment或不使用日期和时间格式

如何使覆盖div与可水平滚动的父div相关?

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

如何将Openjphjs与next.js一起使用?

阿波罗返回的数据错误,但在网络判断器中是正确的

如何根据当前打开的BottomTab Screeb动态加载React组件?

我怎么才能得到Kotlin的密文?

Chart.js-显示值应该在其中的引用区域

React.Development.js和未捕获的ReferenceError:未定义useState

如何发送从REST Api收到的PNG数据响应

如何在HTMX提示符中设置默认值?

当代码另有说明时,随机放置的圆圈有时会从画布上消失

如何防止ionic 输入中的特殊字符.?

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

本地损坏的Java脚本

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面